在具有相同父级的两个上下文中调用executeFetchRequest

时间:2013-04-15 06:29:46

标签: iphone core-data concurrency

您好我已经使用相同的(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:'因为我的应用冻结了它。我会尝试简化我的问题。我用'executeFetchRequest:error:'在每个上下文中调用performBlock 内。如果每个上下文都分配给他自己的线程,为什么这个冻结应用?它不是线程安全吗?

[childObjectContext performBlock:^{
    [childObjectContext executeFetchRequest:request1 error:nil]
}];

[childObjectContext2 performBlock:^{
    [childObjectContext2 executeFetchRequest:request2 error:nil]
}];  

0 个答案:

没有答案