2

我有核心数据嵌套上下文设置。UI 的主队列上下文并保存到 SQLite 持久存储。用于将数据与 Web 服务同步的专用队列上下文。

我的问题是同步过程可能需要很长时间,并且同步对象有可能在主队列上下文中被删除。当私有队列被保存时,它会因为“Core Data could not fully fully faulted”异常而崩溃。

您对如何检查此问题或配置上下文以处理此案例的方式有任何建议吗?

4

1 回答 1

5

嵌套上下文没有魔法。如果没有额外的工作,它们并不能解决很多与并发相关的问题。许多人(您似乎是其中之一)希望事情可以开箱即用,而这些事情不应该起作用。这里有一点背景信息:

如果你使用私有队列并发类型创建一个子上下文,那么 Core Data 将为这个上下文创建一个队列。要与在此上下文中注册的对象进行交互,您必须使用 performBlock: 或 performBlockAndWait:。这两个方法所做的最重要的事情是确保调用上下文队列中传递的块。仅此而已 - 仅此而已。

在非基于核心数据的应用程序的上下文中考虑一下这一点。如果您想在后台做某事,您可以创建一个新队列并安排块在后台处理该队列。如果您的工作完成,您希望将后台操作的结果传达给应用程序逻辑中的另一层。当用户同时删除与后台操作结果相关的对象/数据时会发生什么?基本相同:崩溃。

您所遇到的不是 Core Data 特定的问题。引入并发性后,这是一个问题。您需要考虑的是您的孩子和父母之间的政策或某种合同。例如,在从根上下文中删除对象之前,您应该取消在其他队列上运行的所有操作/块,并在实际删除对象之前等待取消完成。

于 2013-04-26T12:26:11.090 回答