实体更新(保存时)在Core Data中获取通知的最佳方法是什么?

时间:2018-08-31 01:17:51

标签: ios core-data

我试图在一个ViewController中监视一个文章对象。根据我的研究,有几种方法可以实现这一目标,但我不确定哪种方法最合适:

1,让ViewController(或存储库或viewModel,如果我们谈论的是干净的体系结构)成为观察者,以在保存核心数据时监听通知。

2,在我的Core Data抽象层中,为调用save()时添加一个完成块回调。

3,使用NSFetchedResultsController。我知道这是为UITableView和UICollectionView设计的,但是我已经看到人们使用它只是为了进行监视。

在这3条路径中,我倾向于第3条,但是我不确定100%是否是最佳做法,因为大多数人在UITableView或UICollectionView上以1比1的比例使用它。

1 个答案:

答案 0 :(得分:1)

如果您想观察对象何时更改,则1和2不一定会为您提供帮助。

您可以执行3-NSManagedObjectContextObjectsDidChange非常强大-但您也可以执行userInfo内部执行的相同操作,而且可能更简单:

您可以注册为NSUpdatedObjectsKey的观察员。

在确定了此类更改的副作用之后,如果进行了更改,则在运行循环中每过一次发布一次。因此,如果预期会有很多更改,则可以安全使用-您只会收到一次通知-双端关系将保持一致。

它具有丰富的NSRefreshedObjectsKey字典。您的任务可以很简单:检查对象的userInfo的NSDeletedObjectsKeyNSInvalidatedObjectsKey,如果存在,则刷新视图。然后也检查formOptions.myData和{{1}},如果您的对象在那里,则关闭视图控制器或将其返回到“空”状态。