我们偶尔会收到用户的崩溃报告(我们正在使用崩溃报告包将崩溃发送到我们的服务器),并出现以下错误:
“在不同背景下的对象之间建立关系的非法尝试”......
(不同的报告可能有不同的关系,在所有报告中都不一样)。
这似乎很容易,除了:
我们的代码中只有一个NSManagedObject--来自App委托的单身人士。
除主线程外,我们不使用任何线程。
使用initWithEntity:insertIntoManagedObjectContext:
使用上下文分配所有对象(没有一个使用简单的init分配)。
错误绝不会发生在我们的测试中(数千次运行)。
基本上我们被卡住了。
任何想法都将受到赞赏。
答案 0 :(得分:0)
每当我在主线程中使用Core Data时,我会在处理上下文的任何方法中放置一个NSAssert,以便更加确定我知道主线程中发生的一切。像这样:
NSAssert([NSThread isMainThread], @"This method is not in the main thread");
尝试使用它来加倍/三倍/四倍检查事情是否发生在您认为的位置。