我长期以来一直在寻找解决这个问题的方法,但还没有找到。
我正在开发一个带有核心数据的 iOS 应用程序。我创建了两个托管对象上下文 (MOC),它们指向同一个持久存储协调器。一个 MOC(称为 self.moc)使用主队列并发启动,而另一个 mov(称为 self.bmoc)使用私有队列并发启动。我确保 self.moc 只在主线程上运行,而 self.bmoc 只在其performBlock
orperformBlockAndWait
块内运行。
但是,我遇到了这种奇怪的情况,我的应用程序冻结[self.bmoc save:nil]
在线。由于保存操作是在performBlock
块内执行的,因此我看不出它有什么原因会陷入死锁。由于它冻结在那条线上,即使我使用[self.bmoc save:&error]
而不是nil
.
下面是重现问题的代码。虽然我有许多类似于下面的功能,但只有这一个会产生问题。我无法弄清楚问题的原因,非常感谢任何见解。谢谢!
-(void)createEmptyUserData {
[self.bmoc performBlock:^{
User* user = [NSEntityDescription insertNewObjectForEntityForName:@"User" inManagedObjectContext:self.bmoc];
/* sets user object */
[self.bmoc save:nil];
}];
}
注意:这段代码在主线程中执行。