Byr*_*ron 7 core-data ios5 uimanageddocument
有一个Stumper(至少对我来说).
我在UIManagedDocument中使用iOS 5.0 w/ARC和Core Data.
我有一个Entity(Group),它与to-many关系(称为people)到实体(Person).当我添加一个新组,然后添加一个新Person(将该人的.group关系设置为新组)时,我无法使用Person实体中的谓词检索相关人员("group ==%@",myGroup ).我也尝试使用Group的addPerson setter.
如果我关闭XCode模拟器并重新运行它,它会识别在上一次运行中创建的关系,我甚至可以将新人添加到现有的Group对象中.我只是无法添加一个新组,然后添加人员而不关闭模拟器(或设备,如果我在设备上运行),以便看到关系.
如果我在添加新组和相关人员后立即执行[group.people count],它会给我正确的数字.但是,在重新启动应用程序之前,使用谓词进行提取无效.
看起来好像UIManagedDocument的managedObjectContext没有看到关系.我已经尝试保存上下文,保存context.parentContext,并保存文档.这些都没有帮助.
任何想法,将不胜感激!
All*_*net 10
一个UIManagedDocument基本上会在它感觉到的时候保存; 你无法控制何时发生这种情况.但是,它肯定会节省应用程序终止,这就是您重新启动时看到插入的原因.
因此,虽然您可能认为您拥有永久对象ID,但它们实际上可能是临时的,因此无法获取.只需通过NSLog转储它们就可以验证这一点,因为临时对象ID在记录时会显示出来.
要强制它们永久使用并因此可用,请在执行添加后尝试以下操作.假设您有一个UIManagedDocument作为ivar:
- (void)performUpdate
{
NSManagedObjectContext * context = self.managedDocument.managedObjectContext;
NSSet * inserts = [context insertedObjects];
if ([inserts count])
{
NSError * error = nil;
if ([context obtainPermanentIDsForObjects:[inserts allObjects]
error:&error] == NO)
{
NSLog(@"BAM! %@", error);
}
}
[self.managedDocument updateChangeCount:UIDocumentChangeDone];
}
Run Code Online (Sandbox Code Playgroud)
显然,你可以在这里用更好的东西替换错误处理.UIManagedDocument现在将在未来的某个时刻保存(再次,你完全无法控制何时发生这种情况,我们只是要求它在最后一行中这样做,就像撤消管理器一样) ,但新插入的对象现在应该有可用的永久ID,并且提取应该正常工作.
是的,这对我来说似乎有点奇怪,但这似乎是使用UIManagedDocument进行游戏的正确方法.
坦率地说,我喜欢有人告诉我我错了,并提供更好的解决方案.
归档时间: |
|
查看次数: |
1885 次 |
最近记录: |