这是 tableView 问题还是 CoreData 问题

Posted

技术标签:

【中文标题】这是 tableView 问题还是 CoreData 问题【英文标题】:Is this a tableView issue or a CoreData Issue 【发布时间】:2009-12-04 06:38:16 【问题描述】:

我有一个 CoreData 驱动的导航应用程序,我正试图找出它崩溃的原因。

我有一个深度为 3 个视图控制器的层次结构,所有这些都通过 coredata 关系相关,就像这样。

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 的白痴就是我正在寻找的一切。 哦,我应该在这种类型的应用程序中拥有多少个 ManagedObjectContext。我被告知我应该有单独的内容来添加内容,然后应该重新整合到主要内容中。这是真的? 谢谢!

【问题讨论】:

【参考方案1】:

我觉得这是一个问题,您删除 Record1 的子记录,然后当您删除 Record2 的子记录时会出现一些不一致 - 原始托管对象上下文没有得到保存,或者发生冲突,或者一些这样的。我肯定会在您的表格视图代码之前检查您的核心数据对象管理。

至于拥有多个托管对象上下文,通常在添加全新记录时只有一个额外的上下文。典型的模式是将新记录添加到辅助上下文中,然后在添加并保存新记录后将该上下文合并到应用程序的主要上下文中。对于修改或删除,只需使用原始上下文即可。

如果您在最后一个代码 sn-p 中发布 NSLog 语句的日志输出,我可能会更明确您遇到的问题。错误的domaincodeuserInfo 属性在这里都将非常有用。

【讨论】:

以上是关于这是 tableView 问题还是 CoreData 问题的主要内容,如果未能解决你的问题,请参考以下文章

tableView Cell 不显示数据,这是啥问题? (斯威夫特 3)

将 CoreData 与对象一起使用?

在 TableView 中实现 CoreData 时遇到问题

如何将 Firebase 数据检索到 TableView android 中?我应该使用 RecycleView 还是仅适用于列表?

数据插入上的核心数据级联

使用调用自定义 tableview 单元格的函数简化 tableview 代码