2016-04-13 6 views
1

はのは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(); 
} 
}]; 

コードをよると、私はメインのキュー・コンテキストはルートコンテキストであれば、それはメインキューをブロックすると思います。プライベートキューのコンテキストはルートコンテキストでなければならず、メインキューのコンテキストは子コンテキストです。

答えて

3

コードによると、親コンテキストがメインキューにあるため、メインキューをブロックすると思います。

いいえ、少なくともコードには表示されません。データはバックグラウンドスレッドで処理され、プライベートコンテキストが保存されるとメインスレッドコンテキストにプッシュされます(ディスクに保存されません)。

私はプライベートキューでのコンテキストは親コンテキストれるべきだと思う、とmainContextは子コンテキスト

ある例では、実際にはさらに行く必要があるので...場合は、この部分は、興味深いですメインスレッドコンテキストはルートコンテキストであり、ディスクへのセーブはメインスレッド上で実行されます。それがあなたが意味するものであるかどうかは明らかではありませんが、それはそのように見えます。

だから、本当にPSCに接続されているルートとしてプライベートキューコンテキストを持っていて、そのPSCの子としてメインがあるはずです。インポートするプライベートキューコンテキストは、一般的にメインの子であるが、代わりに兄弟になることができる。兄弟ルートを選択すると、メインスレッド時間が最小限に抑えられますが、メインスレッドコンテキストに変更をマージする必要があることを意味します。

+0

ありがとうございます。私の質問では、メインキューのコンテキストがルートコンテキストの場合は、メインキューをブロックすることを意味します。それは正しい? – huixing

+0

メインスレッドコンテキストを保存する場合にのみ、データをディスクに書き込みます(メインスレッドコンテキストがルートであり、PSCに接続されている場合)。子を保存するときにメインをブロックすることはありませんが、それはマージするときにちょっとだけ小さいかもしれません... – Wain

+0

子のコンテキストを保存すると、親コンテキストに変更がマージされますが、保存されませんディスクに変更しますか?変更をディスクに保存したい場合は、ルートコンテキストを手動で保存する必要があります。私はあなたの思考を正しく理解していますか? – huixing

関連する問題