0

我的设置:

  • 连接到我的NSManagedObjectContextwith 类型NSPrivateQueueConcurrencyTypeNSPersistentStoreCoordinator
  • 作为私有上下文的子级的withNSManagedObjectContext类型。NSMainQueueConcurrencyType
  • 作为主上下文的子级的withNSManagedObjectContext类型。NSConfinementConcurrencyType

从服务器下载数据时,我将数据写入 type 的上下文NSConfinementConcurrencyType。然后我保存这个上下文,它将更改推送到我的主要上下文。然后我保存我的主要上下文,它将更改推送到我的私人上下文。此时,我使用performBlock私有上下文上的方法将所有内容保存到我的持久存储中。

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

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

谢谢,

新郎

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

编辑2:找到罪魁祸首。所以我将我的保存上下文调用包装在一个 NSAssert 中(希望在测试时发现任何失败)。不幸的是,Release 配置删除了这些包含我的保存调用的断言块。掌心

4

1 回答 1

1

NSConfinementConcurrencyType是旧的遗留核心数据行为,在父子上下文的概念之前。如果您要导入子上下文,则该子上下文必须是NSPrivateQueueConcurrencyType. 我很惊讶performBlock:, 父/子 MOC的组合NSConfinementConcurrencyType完全有效。

于 2013-03-27T03:14:38.450 回答