NSManagedObjectContextDidSaveNotification 更新 UI 的最佳方式?

NSManagedObjectContextDidSaveNotification best way to update the UI?

在我的代码中,我有一个 mainManagedObjectContext 和一个 backgroundManagedObjectContext,它们运行良好。

我将所有保存代码移至 backgroundManagedObjectContext 并通过 NSManagedObjectContextDidSaveNotification 合并上下文之间的差异。

现在我想在 NSManagedObjectContextDidSaveNotification 之后更新我的 UI。除了 NSFetchedResultController 之外最好的方法是什么?

通过调试器可以看到对象中的更改,我可以为此使用 KVO,但恕我直言,这是一个糟糕的主意。在我的抽象中,我有一个模型来处理数据库调用,如果我的模型在合并上下文后也处理更改,那就太好了。

执行此操作的最佳方法是什么?

如前所述,对于 table 和集合视图,最好的选择是 NSFetchedResultsControllerDelegate

另一种机制是注册此(或您的自定义)通知NSNotificationCenter,例如对于原始通知:

[[NSNotificationCenter defaultCenter] 
       addObserver:self 
          selector:@selector(updateUI:) 
              name:NSManagedObjectContextDidChangeNotification 
            object:nil];

最好在 viewDidAppear 中执行此操作。不要忘记移除 viewWillDisappear 中的观察者。请注意,在评论之后我使用的是更改通知而不是保存通知。

在您的非 table 视图控制器中,您应该隔离 UI 设置,类似于获取结果控制器委托的样板代码,它实现了 configureCell:atIndexPath: 之类的方法。然后,您可以在收到通知时简单地调用此设置例程,而无需复制任何代码。