0

現在、アプリには 2 つのコンテキストがあります。私のアプリは複数のタブを使用しているため、1 つのタブにデータが表示され、別のタブがデータ入力モードになっている可能性があります。

ほとんどのデータを表示用に読み取るために使用するメイン コンテキストが 1 つあります。データを挿入するとき、他のタブの操作でコンテキストに追加された不完全なオブジェクトを保存したくないため、2 番目の一時コンテキストを使用しています。

私はりんごの同時実行ガイドを読んでいます: http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/coredata/Articles/cdConcurrency.html#//apple_ref/doc/uid/TP40003385-SW1

これは、通知を使用してコンテキスト間で変更を伝達する必要があることを示しています。

両方のコンテキストで同じ伝播ストア オブジェクトを使用しています。私の質問は、タブ A でコンテキスト A に変更が加えられた場合、コンテキスト B を使用してタブ B でフェッチ要求が再発行された場合、変更は単にタブ B に表示されるのでしょうか?

これは私が今見ているものです。コア データのキャッシュは、伝播ストア レベルで行われると思いますか? それが正しい場合、コンテキストの同期は、フェッチ クエリを再実行する予定がない場合にのみ必要なので、変更された NSManagedObjects のみを選択的に更新できますか?

これは、新しいコンテキストを取得する方法です。

   NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
    NSManagedObjectContext *newContext;
    if (coordinator != nil) {
        newContext = [[NSManagedObjectContext alloc] init];
        [newContext setPersistentStoreCoordinator:coordinator];
    }
4

2 に答える 2

1

2 つの異なる NSManagedObjectContexts を使用しているときに、タブ B で変更したデータをタブ A に表示する (およびその逆) 場合は、通知にオブザーバーを追加する必要があります。

NSManagedObjectContextDidSaveNotification

タブ A (および A で変更が行われている場合は B) のコントローラー コード内

のように

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(mergeChanges:) name:NSManagedObjectContextDidSaveNotification object:nil];

次に、宣言されたセレクターで

-(void)mergeChanges:(NSNotification *)anotif
{
    [self.managedObjectContext mergeChangesFromContextDidSaveNotification:anotif];
    [self updateTheUI];
}
于 2012-08-18T12:13:37.347 に答える
0

「あるコンテキストで管理対象オブジェクトに加えた変更は、オブジェクトを再取得するか再フォールトしない限り、別のコンテキストの対応する管理対象オブジェクトに反映されません。」

于 2012-08-19T09:28:51.803 に答える