我正在尝试迁移一些代码,以便将NSManagedObjectContext
与NSPrivateQueueConcurrencyType
一起使用。
在将上下文保存到其父级,然后保存父级之后,我有时会遇到非常奇怪的错误。我想知道这些是否是因为没有正确使用NSPrivateQueueConcurrencyType
上下文。
我已打开-com.apple.CoreData.ConcurrencyDebug 1
尝试调试此操作。我很确定这不起作用。如果我在托管对象上下文上执行操作或在不使用performBlock:
的情况下更改其对象,则不会出现错误或抛出。
以下是我如何设置方案的参数:。我也尝试过没有前导-
。
知道我做错了吗?
答案 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,我想为想要立即实现此功能的人提供简化的答案。
您首先需要修改应用的方案:
打开时,请确保已选择“运行”并选择“参数”。 您需要复制以下值:
-com.apple.CoreData.ConcurrencyDebug 1
-com.apple.CoreData.Logging.stderr 1
启动应用程序后,当启用这些选项时,您应该会在控制台中看到它:
CoreData:注释:启用了Core Data多线程断言。
当你遇到由此产生的异常时,你可能会看到:
CoreData` + [的NSManagedObjectContext 的 Multithreading_Violation_AllThatIsLeftToUsIsHonor 强>]:
您可以根据需要返回方案编辑器并禁用此日志记录,以防止将来出现异常。