2011-06-30 171 views
0

我想在后台线程上更新CoreData中的记录。我为每个文档创建了每个线程NSManagedObjectContext's。我也正在注册数据保存时间的通知。但是,mergeChangesFromContextDidSaveNotification正在删除条目而不是更新它们。mergeChangesFromContextDidSaveNotification删除记录

//Notification callback 
- (void)_managedObjectContextDidSave:(NSNotification *)notification 
{ 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     [self.managedObjectContext mergeChangesFromContextDidSaveNotification:notification]; 
    }); 
} 

//per thread managed object context 
- (NSManagedObjectContext *)managedObjectContext 
{ 
    if ([[[NSThread currentThread] threadDictionary] objectForKey:GVControllerManagedObjectContextKey] == nil) { 
     NSPersistentStoreCoordinator *coordinator = self._persistentStoreCoordinator; 
     if (coordinator != nil) { 
      NSManagedObjectContext *managedObjectContext = [[NSManagedObjectContext alloc] init]; 
      [managedObjectContext setPersistentStoreCoordinator:coordinator]; 
      if (![NSThread isMainThread]) { 
       [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_managedObjectContextDidSave:) name:NSManagedObjectContextDidSaveNotification object:managedObjectContext]; 
      } 
      [[[NSThread currentThread] threadDictionary] setObject:managedObjectContext forKey:GVControllerManagedObjectContextKey]; 
      [managedObjectContext release]; 
     } 
    } 

    return [[[NSThread currentThread] threadDictionary] objectForKey:GVControllerManagedObjectContextKey]; 
} 

回答

0

看起来我正在使用来自另一个线程的托管对象(作为我正在更新的对象的属性添加)。