2013-04-25 32 views
0

我有一堆NSOperations與他們自己的NSManagedObjectContexts更改我的核心數據存儲和保存併成功地將其更改到主線程的NSManagedObjectContext。我知道的很多。現在我想要在主要上下文更新時通知前端UIViewController。所以我...是否NSManagedObjectContext的mergeChangesFromContextDidSaveNotification:post NSManagedObjectContextDidSaveNotification?

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 

    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(refreshData:) 
               name:NSManagedObjectContextDidSaveNotification 
               object:[NSManagedObject mainThreadManagedObjectContext]]; 
} 

但是我不合並來自後臺線程改變主線程的的NSManagedObjectContext被張貼了自己的任何通知後的想法。我試圖在蘋果公司的文檔中找到某處,告訴主線程合併更改或其他一些內容後,我應該發佈自己的文檔,但沒有運氣。對於我的NSOperation我有...額外的參考

+ (void)mergeChanges:(NSNotification *)notification 
{ 
    NSManagedObjectContext *managedObjectContext = [self mainThreadManagedObjectContext]; 

    [managedObjectContext performSelectorOnMainThread:@selector(mergeChangesFromContextDidSaveNotification:) 
              withObject:notification 
             waitUntilDone:YES]; 
} 

+ (NSManagedObjectContext *)adHocManagedObjectContext 
{ 
    NSManagedObjectContext *adHocManagedObjectContext = [(AppDelegate *)[[UIApplication sharedApplication] delegate] adHocManagedObjectContext]; 

    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(mergeChanges:) 
               name:NSManagedObjectContextDidSaveNotification 
               object:adHocManagedObjectContext]; 

    return adHocManagedObjectContext; 
} 

我應該期待從主線程的NSManagedObjectContext聽到它保存,或者我應該mergeChangesFromContextDidSaveNotification後後我自己的通知:?

回答

4

mergeChangesFromContextDidSaveNotification:不發帖NSManagedObjectContextDidSaveNotification,因爲mergeChangesFromContextDidSaveNotification:不告訴上下文保存。

也許你的前面UIViewController應該遵守NSManagedObjectContextObjectsDidChangeNotification

+0

感謝rob,我也試過,並收到了一次通知我的上下文改變了500次。你知道會導致什麼嗎? (我在mergeChangesFromContextDidSaveNotification:時調用了一個斷點,並且每次都看到它被調用)很奇怪。 – rob5408 2013-04-25 05:14:49

+0

其實它看起來像我沒有任何引用任何對象(只有故障),我認爲這就是爲什麼我沒有收到通知。作爲測試,我從商店選擇一個對象來保持並每次都收到通知。需要弄清楚設置這個最合理的方法,但是這對我有幫助,謝謝! – rob5408 2013-04-25 05:28:07

相關問題