使com.apple.CoreData.ConcurrencyDebug 1工作

我想迁移一些代码来使用NSPrivateQueueConcurrencyType NSManagedObjectContext

在将上下文保存到其父项后,我有时会遇到非常奇怪的错误,然后保存父项。 我想知道如果这些是由于没有正确使用NSPrivateQueueConcurrencyType上下文。

我已经打开-com.apple.CoreData.ConcurrencyDebug 1来尝试debugging这个。 我很确定,这是行不通的。 如果我在托pipe对象上下文上执行操作,或者在不使用performBlock:情况下更改其对象,则不会收到错误或抛出。

以下是我如何设置计划的参数: 架构编辑 。 我也尝试过,没有领先-

任何想法我做错了什么?

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

如果标志被启用,控制台应该logging下来:

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

来源:来自Ole Begemann的核心数据并发debugging

使用XCode 8.x和iOS 10.x,我想为任何想要实现这一点的人提供简化的答案。

您将首先需要修改您的应用程序的计划:

在这里输入图像说明

selectscheme后,select应该出现在列表底部附近的编辑scheme: 在这里输入图像说明

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

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

你的屏幕应该是这样的: 在这里输入图像说明

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

CoreData:注释:启用了Core Datamultithreading断言。

而当你遇到由此产生的exception,你可能会看到这样的:

CoreData` + [NSManagedObjectContext Multithreading_Violation_AllThatIsLeftToUsIsHonor ]:

您可以返回到scheme编辑器并根据需要禁用此日志logging,以防止将来发生exception。