2010-03-08 103 views
2

我正在嘗試iPhone SDK 3.1.3上的多線程核心數據實現。我會爲每個線程兩種不同的NSManagedObjectContext對象,我喜歡下面登記的變更通知在一個線程中:缺少核心數據通知

- (void)setup { 
    DLog(@"Registering for NSManagedObjectContext notifications"); 
    NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; 
    [nc addObserver:self selector:@selector(test:) name:@"NSManagedObjectContextWillSaveNotification" object:nil]; 
    [nc addObserver:self selector:@selector(test:) name:@"NSManagedObjectContextDidSaveNotification" object:nil]; 
    [nc addObserver:self selector:@selector(test:) name:@"NSManagedObjectContextObjectsDidChangeNotification" object:nil]; 
} 

- (void)test:(NSNotification *)notif { 
    DLog(@"Test callback"); 
} 

在我的其他線程我保存了第二個方面,像這樣:

NSError *error = nil; 
[managedObjectContext save:&error]; 

if (error) { 
    ALog(@"Error occured while trying to save a NewsStory object"); 
} 
else { 
    DLog(@"Saving context"); 
} 

通知回調方法永遠不會被執行,這讓我相信這些通知從不被髮布?

我的日誌顯示如下:

Registering for NSManagedObjectContext notifications 
Saving context 
... 
Saving context 

回答

14

將您的@"NSManagedObjectContextWillSaveNotification"切換爲NSManagedObjectContextWillSaveNotification。那些是常數。這些事件最有可能發佈,但你沒有聽到正確的名字。

+0

Doh!多麼愚蠢的我:(謝謝馬庫斯 – nduplessis 2010-03-09 01:03:53

+0

好趕上!我撇了過去。 – TechZen 2010-03-09 02:07:31

0

有一件事我知道,導致問題的通知和核心數據是具有自定義的管理對象的子類,是沒有正確鍵 - 值觀察兼容。這可以防止首先創建更改通知。

作爲一個測試,我會建議在同一個線程中註冊一個觀察者,或者甚至讓子類(如果你使用它們)註冊來觀察自己。如果這不起作用,那麼你的問題比通知更基本。如果它確實有效,那麼你的問題在於你的線程。

相關問題