Отсутствуют базовые уведомления о данных - PullRequest
2 голосов
/ 08 марта 2010

Я пытаюсь реализовать многопоточную реализацию Core Data на 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

Ответы [ 2 ]

14 голосов
/ 08 марта 2010

Переключите @"NSManagedObjectContextWillSaveNotification" на NSManagedObjectContextWillSaveNotification. Это константы. События, скорее всего, публикуются, но вы не слушаете правильное имя.

0 голосов
/ 08 марта 2010

Одна вещь, которую я знаю, вызывает проблемы с уведомлениями, и Базовые данные имеют собственный подкласс управляемых объектов, который не соответствует требованиям соответствия ключа и наблюдения. Это предотвращает создание уведомлений об изменениях в первую очередь.

В качестве теста я бы предложил зарегистрировать наблюдателя в том же потоке или даже зарегистрировать подкласс (если вы их используете), чтобы наблюдать за собой. Если это не сработает, тогда ваша проблема является более простой, чем уведомления. Если это работает, то ваша проблема в потоке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...