我正在尝试找出在查看,编辑和创建NSManagedObjects时使用NSManagedObjectContexts的正确方法。我觉得文档和示例已经解释了如何在最基本的情况下使用它们,但我不确定在稍微复杂的设置中适当的方法是什么。
设置:
要求:
问题:
可能的答案:
让一个“查看”MOC从未编辑过,并在列表屏幕中使用。使用单独的MOC进行编辑,新对象屏幕和下载。当这些MOC保存时,将更改合并回“查看”MOC。这样,任何更改都不会影响“查看”MOC,直到它们被保存。这就是我一直在做的事情;它似乎并没有像我希望的那样顺利。编辑和查看之间存在脱节,而不是在我知道它们可能发生更改时能够检查事物我必须等待NSFetchedResultsController委托方法完成并检查可能已更改的每个可能的事情。如果我需要在列表视图中更改某些数据,这也很困难。
为一切提供一个MOC。这是我第一次尝试,但不知道如何处理编辑和创建。现在我了解了一点,我想我可以编辑对象或创建一个对象,并在取消时rollBack
。在cimgf上,我看到一个看似相似的post,表示在编辑/创建时创建一个undoGrouping,在取消时创建undo
。然后我想我可以在下载的对象上使用单独的MOC,因为它可能在用户在主MOC中编辑时完成并保存。
无论如何,重点是我不知道正确的方法是什么。你能帮帮我吗?
第一个可能的答案的示例断开
答案 0 :(得分:2)
每个线程应该至少有一个MOC(它们不是线程安全的)。因此,您可以为下载程序(在后台线程中)创建一个MOC,为主线程列表中的活动创建另一个MOC,编辑和新建。
当你说断开连接时,你能更具体一点吗?您是否在收到通知时使用通知(NSManagedObjectContextDidSaveNotification
)并执行mergeChangesFromContextDidSaveNotification
。请记住,mergeChangesFromContextDidSaveNotification
应该在主线程上执行。
在NSFectchedResultsController
的视图控制器中,您是否正确处理了NSFetchedResultsControllerDelegate
的所有情况?