在我的代码中,我有mainManagedObjectContext
和backgroundManagedObjectContext
,而且效果很好。
我将所有保存代码移至backgroundManagedObjectContext
并通过NSManagedObjectContextDidSaveNotification
合并了上下文之间的差异。
现在我想在NSManagedObjectContextDidSaveNotification
之后更新我的用户界面。 NSFetchedResultController
除此之外最好的方法是什么?
通过调试器可以看到我的对象中的更改,我可以使用KVO,但恕我直言,这是一个糟糕的主意。在我的抽象中,我得到了一个模型来处理数据库调用,当我的模型在合并上下文后处理更改时,它会很棒。
这样做的最佳方法是什么?
答案 0 :(得分:2)
正如已经指出的,对于表格和集合视图,最好的选择是NSFetchedResultsControllerDelegate
。
另一种机制是注册此(或您的自定义)通知NSNotificationCenter
,例如原始通知:
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(updateUI:)
name:NSManagedObjectContextDidChangeNotification
object:nil];
最好在viewDidAppear
中执行此操作。不要忘记删除viewWillDisappear
中的观察者。请注意,在评论之后我使用的是更改通知而不是保存通知。
在非表视图控制器中,您应该隔离UI设置,类似于获取结果控制器委托的样板代码,它实现了configureCell:atIndexPath:
之类的方法。然后,您可以在收到通知时简单地调用此安装例程,而无需复制任何代码。