1

こんにちは、同じ (NSMainQueueConcurrencyType) 親を持つ 2 つのプライベート コンテキストを宣言しました。

- (NSManagedObjectContext *)childObjectContext{
if (_childObjectContext != nil) {
    return _childObjectContext;
}
_childObjectContext=[[NSManagedObjectContext alloc]   initWithConcurrencyType:NSPrivateQueueConcurrencyType];
[_childObjectContext setParentContext:self.managedObjectContext];
return _childObjectContext;
}

および 2 番目のプライベート コンテキスト:

- (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]
}];  
4

0 に答える 0