嗨,我已经声明了两个具有相同 (NSMainQueueConcurrencyType) 父级的私有上下文,一个在这里:
- (NSManagedObjectContext *)childObjectContext{
if (_childObjectContext != nil) {
return _childObjectContext;
}
_childObjectContext=[[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
[_childObjectContext setParentContext:self.managedObjectContext];
return _childObjectContext;
}
和第二个私人上下文:
- (NSManagedObjectContext *)childObjectContext2{
if (_childObjectContext2 != nil) {
return _childObjectContext2;
}
_childObjectContext2=[[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
[_childObjectContext2 setParentContext:self.managedObjectContext];
return _childObjectContext2;
}
我认为问题出在“executeFetchRequest:error:”上,因为我的应用程序冻结了它。我会尝试简化我的问题。我在每个上下文中调用 performBlock,并在里面调用 'executeFetchRequest:error:'。如果每个上下文都分配给他自己的线程,为什么这个冻结应用程序?它不是线程安全的吗?
[childObjectContext performBlock:^{
[childObjectContext executeFetchRequest:request1 error:nil]
}];
[childObjectContext2 performBlock:^{
[childObjectContext2 executeFetchRequest:request2 error:nil]
}];