更新到NSManagedObject会导致NSFetchedResultsController删除

时间:2011-04-24 04:25:19

标签: ios ipad uisplitviewcontroller nsfetchedresultscontroller nsmanagedobject

我有一个非常令人沮丧的问题,我已经挣扎了很长一段时间。

为了提供一些上下文和细节,我有一个iOS UISplitViewController应用程序 - 标准主/详细信息。主视图是一个UITableView,它支持NSFetchedResultsController(从SQLite数据存储加载NSManagedObjects)。

似乎正在发生的事情是,详细信息视图中的任何更新(通常会导致更新“主记录”并刷新到NSManagedObject并最终刷新SQ​​L数据存储)会导致对NSFetchedResultsController执行DELETE操作。

我认为这是因为对NSManagedObject属性的写入导致某种类型的错误,这反过来导致NSFetchedResultsController从它的缓存结果集中删除它。最终结果是记录从主视图中“丢失”(例如:UITableCellView将从主UITableView中删除)。

问题在于我不希望这种情况发生,我不知道如何阻止它......

以前有没有人遇到过这个问题,可能会提供一些指导?

提前致谢, 本

1 个答案:

答案 0 :(得分:0)

我不确定这是否能回答你的问题,但我找到了解决我遇到的类似问题的方法。我正在使用每个对象名称的第一个字母对我的Core Data支持的UITableView中的对象进行排序。在我读过的任何教程中,它告诉我在NSManagedObject子类中放置一个瞬态属性“NameInitial”,我将使用该对象名称的第一个字母填充它。然后我使用该属性作为我的sectionNameKeyPath来将对象排序到我的UITableView中的正确部分。

我在每个单元格上都有一个按钮,用于更新与该单元格关联的对象的属性,并且我在didChangeObject委托函数中正确接收了NSFetchedResultsChangeUpdate消息。但是,有时候,单元格会被删除,我会收到NSFetchedResultsChangeDelete消息,原因并不明确。

然后我注意到被删除的单元格(null)作为其关联对象的NameInitial属性。我忘记了瞬态NameInitial只存储在内存中,所以不一定要保持。每当我更新单元格时手动重新填充NameInitial属性,删除就会停止。因此,如果您使用瞬态属性来帮助对UITableView进行排序/分区,这可能是您的问题。

希望这有帮助,祝你好运! -Rick