我有一个CoreData驱动的导航应用程序,我正在试图找出它崩溃的原因。
我有一个层次结构,它是3个视图控制器深层,所有这些都与coredata relatioships相关,就像这样。
TableViewA = relationship = TableViewB = relationship = TableViewC
老实说,我是核心数据的新手,我认为我的问题在于获取结果控制器。我在TableViewA中有一个,在TableViewB中有另一个,无论我走多远,控制台总是在崩溃后引用TableViewB的获取结果控制器方法。这是问题吗?
具体发生的事情是,如果我启动我的应用程序并向下钻取到一个记录的层次结构,让我们称之为Record1,我可以删除子记录到我的内容。走了!没问题!
但是第二次我回到TableViewA并向下钻取到另一个记录,让我们调用一个Record2,并尝试删除它的子记录我的应用程序崩溃,控制台引用TableViewB中的代码作为问题。
- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller {
// The fetch controller is about to start sending change notifications, so prepare the table view for updates.
[self.tableView beginUpdates];
}
当我进入调试器时,它总是遇到问题的具体方法是:
if (![x.managedObjectContext save:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
我认为只是确认了我对CoreData的愚蠢行为。 哦,我应该在这种类型的应用程序中有多少ManagedObjectContexts。我被告知我应该有单独的添加内容,然后重新集成到主要内容。这是真的? 谢谢!
答案 0 :(得分:0)
我觉得这是删除Record1的子记录的问题,然后当你去删除Record2的子记录时会发生一些不一致 - 原始的托管对象上下文没有被保存,或者发生冲突,或者某些这样。我肯定会在表视图代码之前检查你的Core Data对象管理。
对于拥有多个托管对象上下文,通常在添加全新记录时只有一个额外的上下文。典型的模式是将新记录添加到辅助上下文中,然后在添加和保存新记录后将该上下文合并到应用程序的主要上下文中。要进行修改或删除,只需使用原始上下文。
如果您在上一个代码段中发布NSLog
语句的日志记录输出,我可能会更清楚您遇到的问题。错误的domain
,code
和userInfo
属性在这里都会非常有用。