2011-05-27 28 views
13

我有一個主要的NSManagedObjectContext,它是在appDelegate中創建的。從一個NSManagedObjectContext保存的更改不反映在主NSManagedObjectContext

知道,我正在使用另一個NSManagedObjectContext編輯/添加新的對象,而不影響主NSManagedObjectContext,直到我保存它們。

當我保存第二個NSManagedObjectContext時,更改不會反映在主NSManagedObjectContext中,但是如果從模擬器打開.sqlite數據庫,則更改已正確保存到.sqlite數據庫中。無論我是否再次獲取數據,即使創建了第三個NSManagedObjectContext,我也無法看到第二個NSManagedObjectContext發生的更改,但這些更改現在都在磁盤上...

如果我退出並打開應用程序,所有的變化都在那裏。

什麼會導致主NSManagedObjectContext不能看到商店的新變化?

在這種方法之前,我使用了相同的NSManagedObjectContext和undoManager,但我想將它改爲使用兩個不同的NSManagedObjectContext。

謝謝,

m。

second NSManagedObjectContext save: 
----------------------------------------- 

    NSError* error = nil; 

    if ([managedObjectContext hasChanges]) { 
     NSLog(@"This new object has changes"); 
    } 

    if (![managedObjectContext save:&error]) { 
     NSLog(@"Failed to save to data store: %@", [error localizedDescription]); 
     NSArray* detailedErrors = [[error userInfo] objectForKey:NSDetailedErrorsKey]; 
     if(detailedErrors != nil && [detailedErrors count] > 0) { 
      for(NSError* detailedError in detailedErrors) { 
       NSLog(@" DetailedError: %@", [detailedError userInfo]); 
      } 
     } 
     else { 
      NSLog(@" %@", [error userInfo]); 
     } 
    } 

回答

26

如果您還沒有這樣做的話,我建議您閱讀蘋果文檔上Core Data : Change Management.

您需要通知的,將其通過第二上下文保存下來的修改第一上下文。保存上下文時,會發布NSManagedObjectContextDidSaveNotification。註冊該通知。在處理程序方法中,將通過第二個上下文保存的更改合併到第一個上下文中。例如:

// second managed object context save 

// register for the notification 
[[NSNotificationCenter defaultCenter] 
    addObserver:self 
     selector:@selector(handleDidSaveNotification:) 
      name:NSManagedObjectContextDidSaveNotification 
     object:secondManagedObjectContext]; 

// rest of the code ommitted for clarity 
if (![secondManagedObjectContext save:&error]) { 
    // ... 
} 

// unregister from notification 
[[NSNotificationCenter defaultCenter] 
    removeObserver:self 
       name:NSManagedObjectContextDidSaveNotification 
      object:secondManagedObjectContext]; 

通知處理程序:

- (void)handleDidSaveNotification:(NSNotification *)note { 
    [firstManagedObjectContext mergeChangesFromContextDidSaveNotification:note]; 
} 
+0

我認爲NSManagedObjectContextDidSaveNotification沒有必要/強制性的,我讀過其他職位,那就是我不明白。我會嘗試你的建議,並在這裏再次發佈。謝謝! – mongeta 2011-05-27 18:45:47

+1

謝謝,完美無缺! – mongeta 2011-05-28 16:29:10

+0

不客氣! – octy 2011-05-29 02:10:23

相關問題