gpt4 book ai didi

cocoa - 如何处理子上下文中的保存,但对象已在父上下文中删除?

转载 作者:行者123 更新时间:2023-12-03 16:27:07 27 4
gpt4 key购买 nike

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

我的问题是同步过程可能需要很长时间,并且同步对象有可能在主队列上下文中被删除。当保存私有(private)队列时,它将崩溃并出现“Core Data Could not履行错误”异常。

您对如何检查此问题或配置上下文以处理此情况有什么建议吗?

最佳答案

嵌套上下文背后并没有什么魔力。如果不做额外的工作,它们就无法解决很多与并发相关的问题。许多人(你似乎就是其中之一)期望事情能够开箱即用,但实际上并不应该起作用。以下是一些背景信息:

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

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

您遇到的问题不是 Core Data 特定的问题。一旦引入并发,就会遇到这个问题。您需要考虑的是您的 child 和 parent 之间的政策或某种契约(Contract)。例如,在从根上下文中删除对象之前,您应该取消在其他队列上运行的所有操作/ block ,并等待取消完成,然后再实际删除该对象。

关于cocoa - 如何处理子上下文中的保存,但对象已在父上下文中删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16235757/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com