实体保存失败时调用的NSFetchedResultsController didChangeObject方法

时间:2015-07-31 13:15:26

标签: swift core-data nsfetchedresultscontroller

我有一个核心数据的Master / Detail应用程序。我是关于核心数据的新手,所以我不明白为什么当我添加新实体并context.save(&error)返回false时(例如因为我没有设置非可选项)属性)虽然没有保存对象,但调用了func controller(controller: NSFetchedResultsController, didChangeObject anObject: AnyObject, atIndexPath indexPath: NSIndexPath?, forChangeType type: NSFetchedResultsChangeType, newIndexPath: NSIndexPath?)方法。

任何人都可以帮助我理解?

1 个答案:

答案 0 :(得分:2)

由于您正在使用NSFetchedResultsController ALL 更改您正在使用的上下文,因此会将其发送到NSFetchedResultsController。 NSFetchedResultsController侦听上下文而不是商店

当您调用save方法时,数据仅持久保存到数据库(persistentStore的示例)。但是,当调用save方法时,上下文会更新。当我的UITableView变慢时,我也想到了这一点,因为NSFetchedResultsController正在更新我的单元格两次。 首先将对象添加到上下文中,但是当您保存时,它会再次更新上下文。

我采取的措施是为后台操作实现第二个上下文,只有当我在后台上下文中保留更改时,我才会将它们发送到前台,这样我的UI只会更新一次。

也许您可以查看以下链接,看看您是否需要类似的解决方案。这个链接最清楚地向我展示了发生了什么以及我需要什么。