【问题标题】:Missing Core Data Notifications缺少核心数据通知
【发布时间】:2010-03-08 13:14:10
【问题描述】:

我正在 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

【问题讨论】:

    标签: iphone cocoa-touch core-data


    【解决方案1】:

    将您的 @"NSManagedObjectContextWillSaveNotification" 切换为 NSManagedObjectContextWillSaveNotification。这些是常数。这些事件很可能已发布,但您没有在听正确的名称。

    【讨论】:

      【解决方案2】:

      我知道的一件事会导致通知出现问题,Core Data 有一个自定义托管对象子类,它不正确地符合键值观察。这可以防止一开始就创建更改通知。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-24
        • 2013-06-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-04
        相关资源
        最近更新 更多