5

我们偶尔会收到来自用户的崩溃报告(我们正在使用崩溃报告程序包,将崩溃发送到我们的服务器)并出现以下错误:

“非法尝试在不同上下文中的对象之间建立关系'...'”

(不同的报告可能有不同的关系,并非所有报告都相同)。

这似乎很容易,除了:

  1. 我们的代码中只有一个 NSManagedObject - 来自 App 委托的单例。

  2. 除了主线程,我们不使用任何线程。

  3. 所有对象都是使用上下文分配的initWithEntity:insertIntoManagedObjectContext:(没有一个是通过简单的初始化分配的)。

  4. 在我们的测试(数千次运行)中从未发生过错误。

所以基本上我们被困住了。

任何想法将不胜感激。

4

1 回答 1

-1

每当我在主线程中使用 Core Data 时,我都会在任何处理上下文的方法中放置一个 NSAssert,以确保我知道所有事情都在主线程中发生。像这样的东西:

NSAssert([NSThread isMainThread], @"This method is not in the main thread");

尝试使用它来双重/三重/四重检查事情是否在您认为的地方发生。

于 2012-08-20T17:44:07.030 回答