gpt4 book ai didi

iphone - 父 NSManagedObjectContext 在子保存后没有变化,但仅在 Release模式下(在 Debug模式下工作)

转载 作者:行者123 更新时间:2023-11-29 04:02:58 26 4
gpt4 key购买 nike

我的设置:

  • 类型为 NSPrivateQueueConcurrencyTypeNSManagedObjectContext,已连接到我的 NSPersistentStoreCoordinator
  • 类型为 NSMainQueueConcurrencyTypeNSManagedObjectContext,它是私有(private)上下文的子级。
  • 类型为 NSConfinementConcurrencyTypeNSManagedObjectContext,它是主上下文的子级。

从服务器下载数据时,我将数据写入 NSConfinementConcurrencyType 类型的上下文。然后,我保存此上下文,这会将更改推送到我的主上下文。然后,我保存我的主上下文,这会将更改推送到我的私有(private)上下文。此时,我在私有(private)上下文上使用 performBlock 方法将所有内容保存到我的持久存储中。

在设备上调试时,这可以完美地工作。每当我归档应用程序并在 Release模式下运行应用程序时,即使我成功保存了它的子上下文,我的主上下文也永远不会收到更改。我已经仔细检查过,我的临时上下文确实链接到主上下文(主上下文确实显示为临时上下文的父级)。但是每当我在 Release模式下保存临时上下文时,主上下文永远不会显示任何更改。我很困惑为什么这可以在 Debug模式下工作,但不能在 Release模式下工作。

任何建议/帮助将不胜感激。

谢谢

帅气

编辑:如果我使用调试配置存档构建,一切都会按预期工作。因此,发布配置中有一些不同的设置。我会报告我的发现。

编辑2:找到罪魁祸首。因此,我将保存上下文调用包装在 NSAssert 中(希望在测试时捕获任何失败)。不幸的是,发布配置删除了这些包含我的保存调用的断言 block 。 脸掌

最佳答案

NSConfinementConcurrencyType 是旧版 Core Data 行为,早于父上下文和子上下文的概念。如果您要导入子上下文,则该子上下文必须是 NSPrivateQueueConcurrencyType。令我惊讶的是,performBlock:、父/子 MOC 和 NSConfinementConcurrencyType 的组合竟然能够发挥作用。

关于iphone - 父 NSManagedObjectContext 在子保存后没有变化,但仅在 Release模式下(在 Debug模式下工作),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15650032/

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