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:
之类的方法。然后,您可以在收到通知时简单地调用此设置例程,而无需复制任何代码。
在我的代码中,我有一个 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:
之类的方法。然后,您可以在收到通知时简单地调用此设置例程,而无需复制任何代码。