タイトルが示唆しているように、さまざまなバックグラウンドスレッドのオブジェクトでいっぱいになるコアデータアプリケーションを使用しています(XML解析)
私のバックグラウンドスレッドでは、これを行っています
managedContext = [[NSManagedObjectContext alloc] init];
[managedContext setUndoManager:nil];
[managedContext setPersistentStoreCoordinator: [[DataManager sharedManager] persistentStoreCoordinator]];
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc addObserver:self
selector:@selector(mergeChanges:)
name:NSManagedObjectContextDidSaveNotification
object:managedContext];
NSMutableArray *returnSource = [[self parseDocument:doc] retain];
[managedContext save:&error];
if (error) {
NSLog(@"saving error in datafeed");
}
[managedContext reset];
[self performSelectorOnMainThread:@selector(parseCompleteWithSource:) withObject:returnSource waitUntilDone:YES];
Mergeメソッドは次のようになります。
NSManagedObjectContext *mainContext = [[DataManager sharedManager] managedObjectContext];
// Merge changes into the main context on the main thread
[mainContext performSelectorOnMainThread:@selector(mergeChangesFromContextDidSaveNotification:)
withObject:notification
waitUntilDone:YES];
[[NSNotificationCenter defaultCenter] removeObserver:self];
マージは成功したと思いますが、UITableViewに表示したいので、オブジェクトが無効になっていることを常に通知します。
[managedContext reset];
私がやりたいのは、現在データベースにあるアイテムを表示し、バックグラウンドでxmlを解析し、それが終了したら、UITableViewを新しい/更新されたオブジェクトで更新したいです。どうすればよいですか、オブジェクトを他のコンテキストに「更新」できますか、それともマージが正しく機能しませんか?
Main ObjectContextで特定の何かを定義する必要がありますか?運が悪かったので、さまざまなマージポリシーを試しました。
あなたが私を助けてくれることを願っています、ありがとう!