objective-c - NSManagedObjectContextDidSaveNotification 更新 UI 的最佳方法?

标签 objective-c core-data nsmanagedobjectcontext nsnotificationcenter

在我的代码中,我有一个 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/

相关文章:

ios - 如何检测 UIPageViewController 到达最后一页

objective-c - iOS >> 单独的 .h&.m 文件来管理 UITableView

objective-c - 转换NSDate

ios - Objective c 中的 UIButton 虚线下划线

cocoa - Core Data存储数据文件占用过多空间

iphone - NSManagedObjectContext 保存不会崩溃但会在 objc_exception_throw 上中断

ios - 确定保存 NSManagedObjectContext 是否会导致对持久存储的更改

core-data - 在串行 NSOperationQueue 上初始化 NSManagedObjectContext

ios - 通过 UiControls 过滤 CoreData 记录的最佳实践

ios - 在实体中获取选定的属性