2011-06-30 16 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

他のスレッドの管理対象オブジェクト(私が更新していたオブジェクトのプロパティとして追加されたもの)を使用していたようです。

関連する問題