【发布时间】:2010-07-28 22:01:06
【问题描述】:
设置:
我有两个托管上下文设置(在 iPhone 应用程序上)。我用于大多数查询的主要上下文和用于我希望在后台发生的长时间运行的操作的后台上下文。
我已经针对每个托管对象上下文设置了 NSManagedObjectContextDidSaveNotification 通知。为了响应通知,我调用 mergeChangesFromContextDidSaveNotification 进行同步。这也是一个要求,每当主上下文发生变化时,我需要在后台上下文中运行一些作业,因为现在事情的状态已经发生了变化。
只要只在其中一种上下文中写入,它就可以正常工作。在这种情况下,写在主要上下文上。但是,如果我在后台上下文中写入,则会导致无限循环。在后台上下文中保存会触发对主上下文的通知,主上下文依次合并更改并触发自己的通知,由后台上下文获取。这会触发后台上下文执行其后台作业,这些作业(如果他们写任何东西)再次开始循环。
这似乎是错误的设置,或者我需要一种方法来将“在主上下文发生更改时开始处理后台作业”与更改通知分离,或者我需要使后台上下文读取-仅限。
想法?与典型的“第二个上下文导入”场景不同,我相信我需要/希望我的背景上下文相对于主要上下文保持最新,以便我从我的背景中获得正确的结果工作。
【问题讨论】:
-
我不知道你的具体应用,但在一般的 CS 中,如果你有一个必须检测/打破的循环依赖,你可以添加状态(在包含两种情况下),因此您正在实施“标记和扫描”。
标签: iphone objective-c core-data nsmanagedobjectcontext