NSManagedObjectContextDidSaveNotification更新UI的最佳方法?

时间:2015-01-26 15:03:12

标签: objective-c core-data nsmanagedobjectcontext nsnotificationcenter

在我的代码中,我有mainManagedObjectContextbackgroundManagedObjectContext,而且效果很好。

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

现在我想在NSManagedObjectContextDidSaveNotification之后更新我的用户界面。 NSFetchedResultController除此之外最好的方法是什么?

通过调试器可以看到我的对象中的更改,我可以使用KVO,但恕我直言,这是一个糟糕的主意。在我的抽象中,我得到了一个模型来处理数据库调用,当我的模型在合并上下文后处理更改时,它会很棒。

这样做的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

正如已经指出的,对于表格和集合视图,最好的选择是NSFetchedResultsControllerDelegate

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

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

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

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