2012-02-16 105 views
0

當我們第一次將核心數據添加到我們的應用程序時,我們遵循的教程在我們的應用程序委託中創建了一個NSManagedObjectContext。它建議,如果我們在其他線程中使用的核心數據,我們應該添加一個觀察者來更新我們的主要背景下保存線程的上下文時,像這樣:我是否需要觀察每個創建的NSManagedObjectContext的NSManagedObjectContextDidSaveNotification?

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

applicationDidFinishLoadingWithOptions:發生一次。但是,NSManagedObjectContext的文檔說:

幾個系統框架在內部使用核心數據。如果您註冊接收來自所有上下文的這些通知(將nil作爲對象參數傳遞給addObserver ...方法),則可能會收到難以處理的意外通知。

這表明對象參數應該是保存的上下文(在我的情況下是背景上下文)而不是主要上下文。是這樣嗎?我是否需要觀察我創建的每個NSManagedObjectContext的NSManagedObjectContextDidSaveNotification?

回答

4

西蒙,

-addObserver:selector:name:object:方法的目的是通知的來源。在你的情況下,它應該是背景NSManagedObjectContext

你應該觀察你創建的每個環境嗎?就像所有的事情一樣,這取決於。例如,有時候你想使用上下文作爲暫存器,永遠不會保存任何東西。爲什麼要觀察它呢?一般來說,您想要觀察任何會改變持久存儲的上下文。

Andrew

相關問題