はのはCoreDataの同時実行についてのAppleのドキュメントを見てみましょう:一般的にAppleの文書でCoreDataの親子モデルを理解するにはどうすればよいですか?
、ユーザ関連ではありませんメインキューにデータ処理を行うことを避けます。データ処理はCPUを大量に消費する可能性があり、メインキューで実行されると、ユーザーインターフェイスで応答がなくなる可能性があります。 JSONからコアデータにデータをインポートするなど、アプリケーションでデータを処理する場合は、プライベートキューコンテキストを作成し、プライベートコンテキストでインポートを実行します。次の例は、これを実行する方法を示しています。
NSArray *jsonArray = …; //JSON data to be imported into Core Data
NSManagedObjectContext *moc = …; //Our primary context on the mainqueue
NSManagedObjectContext *private = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
[private setParentContext:moc];
[private performBlock:^{
for (NSDictionary *jsonObject in jsonArray) {
NSManagedObject *mo = …; //Managed object that matches the incoming JSON structure
//update MO with data from the dictionary
}
NSError *error = nil;
if (![private save:&error]) {
NSLog(@"Error saving context: %@\n%@", [error localizedDescription], [error userInfo]);
abort();
}
}];
コードをよると、私はメインのキュー・コンテキストはルートコンテキストであれば、それはメインキューをブロックすると思います。プライベートキューのコンテキストはルートコンテキストでなければならず、メインキューのコンテキストは子コンテキストです。
ありがとうございます。私の質問では、メインキューのコンテキストがルートコンテキストの場合は、メインキューをブロックすることを意味します。それは正しい? – huixing
メインスレッドコンテキストを保存する場合にのみ、データをディスクに書き込みます(メインスレッドコンテキストがルートであり、PSCに接続されている場合)。子を保存するときにメインをブロックすることはありませんが、それはマージするときにちょっとだけ小さいかもしれません... – Wain
子のコンテキストを保存すると、親コンテキストに変更がマージされますが、保存されませんディスクに変更しますか?変更をディスクに保存したい場合は、ルートコンテキストを手動で保存する必要があります。私はあなたの思考を正しく理解していますか? – huixing