2010-03-08 58 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

有一件事我知道,导致问题的通知和核心数据是具有自定义的管理对象的子类,是没有正确键 - 值观察兼容。这可以防止首先创建更改通知。

作为一个测试,我会建议在同一个线程中注册一个观察者,或者甚至让子类(如果你使用它们)注册来观察自己。如果这不起作用,那么你的问题比通知更基本。如果它确实有效,那么你的问题在于你的线程。

相关问题