質問:一部のオブジェクトのみをコアデータのディスクに保存する必要がある一連のデータを処理する最良の方法は何ですか?
これはアプリ/問題です : アプリは、インターネット上のさまざまなアイテムを検索する可能性をユーザーに提供します。検索により、ユーザーに表示される多数のオブジェクトが返されます。ユーザーは、これらのオブジェクトをいつでもお気に入りに追加できる必要があります。優先されたオブジェクトは、現在ログインしているユーザーに接続され、アプリが終了した後に有効になります。
アプリのベースは iOS6 になります。
私はこれらのリソースを使用して使用しています
- Apple の Core Data Programming Guide: Efficiently Importing Data
- iOS 5 での高速かつ効率的なコア データ インポートの実装
- iDeveloperTV CoreData パフォーマンス コース
私は現在、マスター、メイン、および閉じ込めのコンテキストタイプの 3 つのコンテキストを使用した親子アプローチを検討しています。
現在考えられる解決策:
- ディスクへの保存を行うMasterContext (persistentStoreCoordinatorを持つ)
- UI で使用される MainContext (masterContext の子)
- 検索からの新しいオブジェクトを処理するための BackgroundContext。(mainContext の子)
そのため、ユーザーは 100 個のオブジェクトを返す検索を実行できます (バックグラウンド コンテキストでインポートされ、メイン コンテキストに保存されます)。これらのオブジェクトのうち 2 つは (メインコンテキストで) ユーザーに好まれています。オブジェクトはユーザーに追加され、「保存する必要がある」として設定されます。(保存時に、オブジェクトはマスター コンテキストにプッシュされます)
mastercontext を保存するときに、100 個のオブジェクトすべてをディスクに保存したくありません。ユーザーが気に入った 2 つのオブジェクトのみ。
そのため、マスターコンテキストで保存する直前に、ディスクに保存してはならないオブジェクトを削除することを考えています。
- (void) mainContextHasSaved: (NSNotification *) notification {
NSLog(@"Lets save the master");
[_masterManagedObjectContext performBlock:^{
//Loop through all inserted object and check if they should be saved to disk
[self removeObjectThatShouldNotBeSavedToDisk];
NSError *error = nil;
BOOL saveSuccess = [_masterManagedObjectContext save:&error];
if(saveSuccess) {
//Do something
}
}];
}
しかし、私が理解したのは、親コンテキストで保存が実行されると、すべての変更が子に伝播されるということです。次に、保管されていた 2 つを除くすべてのオブジェクトを解きます。
では、この種の問題を解決する方法を知っている人はいますか? 上記の例でできることはありますか?または、複数のpersistentStoresを作成し、コンテキスト間でオブジェクトを移動する必要がありますか?
助けてくれるすべての人に感謝します。さらに情報が必要な場合は、質問してください:)