在我的代码中,我有一个 mainManagedObjectContext
和一个 backgroundManagedObjectContext
并且它工作得很好。
我将所有保存代码移至 backgroundManagedObjectContext
并通过 NSManagedObjectContextDidSaveNotification
合并上下文之间的差异。
现在我想在 NSManagedObjectContextDidSaveNotification
之后更新我的 UI。除了 NSFetchedResultController
之外,最好的方法是什么?
我的对象中的更改通过调试器可见,我可以使用 KVO 来实现此目的,但恕我直言,这是一个糟糕的主意。在我的抽象中,我有一个模型来处理数据库调用,如果我的模型在合并上下文后也处理更改,那就太好了。
执行此操作的最佳方法是什么?
最佳答案
正如已经指出的,对于表和 Collection View ,最好的选择是NSFetchedResultsControllerDelegate
。
另一种机制是注册此(或您的自定义)通知NSNotificationCenter
,例如对于原始通知:
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(updateUI:)
name:NSManagedObjectContextDidChangeNotification
object:nil];
最好在viewDidAppear
中执行此操作。不要忘记在 viewWillDisappear
中删除观察者。请注意,在评论之后,我使用的是更改通知而不是保存通知。
在非 TableView Controller 中,您应该隔离 UI 设置,类似于获取结果 Controller 委托(delegate)的样板代码,它实现了 configureCell:atIndexPath:
等方法。然后,您可以在收到通知时简单地调用此设置例程,而无需重复任何代码。
关于objective-c - NSManagedObjectContextDidSaveNotification 更新 UI 的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28152732/