Ich habe diesen Hintergrund-Thread, der ein paar Dinge mit Kerndatenobjekten tut. Ich erhalte den Kontext wie folgt:
- (id)_managedObjectContextForThread;
{
NSManagedObjectContext * newContext = [[[NSThread currentThread] threadDictionary] valueForKey:@"managedObjectContext"];
if(newContext) return newContext;
newContext = [[NSManagedObjectContext alloc] init];
[newContext setPersistentStoreCoordinator:[[[NSApplication sharedApplication] delegate] persistentStoreCoordinator]];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(_mergeChangesFromManagedObjectContext:)
name:NSManagedObjectContextDidSaveNotification
object:newContext];
[[[NSThread currentThread] threadDictionary] setValue:newContext forKey:@"managedObjectContext"];
return newContext;
}
dann hole ich einige Objekte, ändere sie und speichere den Kontext:
- (void) saveContext:(NSManagedObjectContext*)context {
NSError *error = nil;
if (![context save:&error]) {
[[NSApplication sharedApplication] presentError:error];
}
}
- (void)_mergeChangesFromManagedObjectContext:(NSNotification*)notification;
{
[[[[NSApplication sharedApplication] delegate] managedObjectContext] performSelectorOnMainThread:@selector(mergeChangesFromContextDidSaveNotification:)
withObject:notification
waitUntilDone:YES];
}
später entferne ich den Beobachter. Das funktioniert für den Hauptteil. Aber einige Eigenschaften werden nicht aktualisiert, wenn sie wieder zusammengeführt werden. Die Eigenschaften, die vorher nicht vorhanden waren, werden aktualisiert. Diejenigen, die einen Wert hatten, bleiben gleich.
Ich habe es versucht:
[newContext setMergePolicy:NSOverwriteMergePolicy];
... (und die anderen Zusammenführungsrichtlinien) im Hauptkontext, aber es hat nicht funktioniert :P
Ich danke Ihnen für Ihre Hilfe.
Hinweis: Ich habe die Werte an eine NSTableView gebunden. Ich protokolliere sie nach der Zusammenführung. Die Werteigenschaften, die null waren, scheinen gut zu funktionieren.