使com.apple.CoreData.ConcurrencyDebug 1工作

Ben*_*ohn 9 core-data ios

我正在尝试迁移一些代码以使用NSManagedObjectContextwith NSPrivateQueueConcurrencyType.

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

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

这是我如何设置方案的参数:架构编辑.我也没有领先的尝试过-.

知道我做错了什么吗?

Big*_*ood 11

该参数-com.apple.CoreData.ConcurrencyDebug可从iOS> 8和OSX> 10.10获得:确保您定位到正确的平台.

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

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

来源:Ole Begemann的核心数据并发调试

  • 对于iOS10/macOS 10.12,您还需要指定"-com.apple.CoreData.Logging.stderr 1"以在调试控制台中查看断言.请参阅以下网址中的"行为更改"部分:https://developer.apple.com/library/content/releasenotes/General/WhatNewCoreData2016/ReleaseNotes.html (2认同)

Cod*_*der 6

与XCode 8.x和iOS 10.x一起使用时,我想为想要立即实现此目标的任何人提供简化的答案。

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

在此处输入图片说明

选择方案后,选择编辑方案,该方案应显示在列表底部附近: 在此处输入图片说明

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

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

您的屏幕应如下所示: 在此处输入图片说明

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

CoreData:批注:已启用Core Data多线程断言。

当您遇到由此产生的异常时,您可能会看到以下信息:

CoreData` + [NSManagedObjectContext Multithreading_Violation_AllThatIsLeftToUsIsHonor ]:

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