3

大規模なデータ セットの UI 応答型のダウンロードと解析を実装し、それを Core Data に保存したいと考えています。

私のセットアップ:

ダウンロードしたコンテンツをカスタム ビュー コントローラーに表示します。私は NSFetchedResultsController を使用しません。

3 つの MOC があります。

  1. masterMOC (ディスクへの保存を担当、NSPrivateQueueConcurrencyType)
  2. mainMOC (masterMOC の子である UI、NSMainQueueConcurrencyType で使用)
  3. backgroundMOC (JSON からのインポートを担当し、別のスレッドで作成され、masterMOC の子)

バッチでインポートしています-50アイテムごとに、次の方法でMOC保存を実行します。

NSError *error;
[backgroundMOC save:&error];
NSManagedObjectContext *masterMOC = backgroundMOC.parentContext; //set during initialization               
[masterMOC performBlock:^{
    NSError *parentContextError = nil;
    [masterMOC save:&parentContextError];
}];

masterMOC が保存された後に、mainMOC の変更が行われることを期待しています。masterMOC の保存中に (保存に時間がかかる) ランダムな管理対象オブジェクトのリレーションシップにアクセスしようとすると、保存が完了するまで UI がハングします。

質問: masterMOC の保存中に UI がフリーズしないようにするにはどうすればよいですか?

4

1 に答える 1

0

あなたの問題はおそらく、書き込み中にデータストアがブロックされていることです。したがって、データ ストアをノンブロッキングにするか (これは、あなたのケースでは可能である場合と不可能な場合があります)、実行できない場合は、アクセサーをノンブロッキングにします。後者の場合、GUI はハングしませんが、アクセスの結果が戻るまで更新もされません。

于 2013-01-15T15:41:48.777 に答える