使com.apple.CoreData.ConcurrencyDebug 1工作

时间:2015-07-13 19:30:28

标签: ios core-data

我正在尝试迁移一些代码,以便将NSManagedObjectContextNSPrivateQueueConcurrencyType一起使用。

在将上下文保存到其父级,然后保存父级之后,我有时会遇到非常奇怪的错误。我想知道这些是否是因为没有正确使用NSPrivateQueueConcurrencyType上下文。

我已打开-com.apple.CoreData.ConcurrencyDebug 1尝试调试此操作。我很确定这不起作用。如果我在托管对象上下文上执行操作或在不使用performBlock:的情况下更改其对象,则不会出现错误或抛出。

以下是我如何设置方案的参数:Schema Edit。我也尝试过没有前导-

知道我做错了吗?

2 个答案:

答案 0 :(得分:10)

论坛-com.apple.CoreData.ConcurrencyDebug可从iOS>获得。 8和OSX> 10.10:确保你的目标是正确的平台。

如果启用了标志,控制台应记录此信息:

CoreData: annotation: Core Data multi-threading assertions enabled.

来自Ole Begemann的Core Data Concurrency Debugging

答案 1 :(得分:5)

使用XCode 8.x和iOS 10.x,我想为想要立即实现此功能的人提供简化的答案。

您首先需要修改应用的方案:

enter image description here

选择Scheme后,选择应显示在列表底部附近的编辑方案: enter image description here

打开时,请确保已选择“运行”并选择“参数”。 您需要复制以下值:

  • -com.apple.CoreData.ConcurrencyDebug 1
  • -com.apple.CoreData.Logging.stderr 1

您的屏幕应如下所示: enter image description here

启动应用程序后,当启用这些选项时,您应该会在控制台中看到它:

  

CoreData:注释:启用了Core Data多线程断言。

当你遇到由此产生的异常时,你可能会看到:

  

CoreData` + [的NSManagedObjectContext   的 Multithreading_Violation_AllThatIsLeftToUsIsHonor ]:

您可以根据需要返回方案编辑器并禁用此日志记录,以防止将来出现异常。