3


coredata を使用する iPad アプリケーションに取り組んでいます。Web 上にあるデータベースの情報をダウンロードし、coredata に記録します。アプリケーションは分割ビューに基づいています。私の問題は、バックグラウンドでデータのダウンロードと記録を行うことでした。
これが私が行った方法です:
- データのダウンロードと記録を行う NSOperation を作成しました。
- この NSOperation は appDelegate のコンテキストとは異なる NSManagedObjectContext を使用し、 appDelegate にあるこの関数によって返されます:

(NSManagedObjectContext*)newContextToMainStore {
     NSPersistentStoreCoordinator *coord = nil;
     coord = [self persistentStoreCoordinator];
     NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] init]; 
     [moc setPersistentStoreCoordinator:coord]; 
     return [moc autorelease];
}

- NSOperation にオブザーバーがあり、コンテキストを保存するときに appDelegate でこの関数を呼び出して、デリゲートのコンテキストも変更します。

- (void)mergeChangesFromContextSaveNotification:(NSNotification*)notification {
     [[self managedObjectContext]mergeChangesFromContextDidSaveNotification:notification];
}

しかし、私は問題を抱えています.appDelegateのコンテキストで初期化されたNSManagedObjectContextを持ち、NSFetchedResultsControllerをデータソースとして使用するrootViewController(UITableViewController)のデータは自動的に実現しないため、同期が機能しません通常はそうしなければならないので、情報。
だから私はあなたに尋ねます:
私は何を間違えましたか?2 つの異なるコンテキストを使用してそれらを同期させるのは良い方法ですか?

4

1 に答える 1

1

ここにあるものは正しいように見えます。NSFetchedResultControllerDelegate変更が UI に表示されるように、rootViewController にメソッドを実装する必要があります。

于 2010-07-12T15:47:19.893 に答える