gpt4 book ai didi

objective-c - 使用共享持久存储在 NSManagedObjectContexts 之间复制挂起的更改?

转载 作者:太空狗 更新时间:2023-10-30 03:51:22 26 4
gpt4 key购买 nike

我有两个 NSManagedObjectContext 实例:一个在主线程中使用,另一个在后台线程中使用(通过 NSOperation)。为了线程安全,这些两个上下文只共享一个 NSPersistentStoreCoordinator

我遇到的问题是第一个上下文(在主线程上)中的未决更改在执行 -save 之前对第二个上下文不可用。这是可以理解的,因为共享持久存储不会有 -insertedObjects-updatedObjects 跟踪的 NSManagedObjects 的副本-deletedObjects 被保留。

不幸的是,这给用户体验带来了问题:任何未保存的更改都不会出现在后台线程中生成的(耗时的)报告中。

我能想到的唯一解决方案是讨厌的:从第一个上下文中取出插入、更新和删除的对象,并将它们移植到第二个上下文的对象图上。数据集中有一些非常复杂的关系,所以我犹豫要不要朝这个方向发展。我希望有人能提供更好的解决方案。

最佳答案

如果这是在 10.7 以下,则有一些解决方案:一种是您可以嵌套 ManagedObjectContexts,这样您就可以“保存”到正在修改的那个中,它不会一直保存到磁盘,但它会使对主上下文的其他子项可用的更改。

在 10.7 之前,您可能必须自己复制更改。这并不难,因为您可以只让一个对象监听 NSManagedObjectContextObjectsDidChangeNotification,然后从主上下文中重新应用更改。 (应该是大约 20 行代码。)我假设您永远不必保存第二个上下文?

关于objective-c - 使用共享持久存储在 NSManagedObjectContexts 之间复制挂起的更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9728415/

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