NSManagedObjectContextObjectsDidChangeNotification словарь пользовательской информации - PullRequest
1 голос
/ 02 ноября 2009

Я использую в своем приложении уведомление NSManagedObjectContextObjectsDidChangeNotification, я уже сейчас знаю, как его использовать. Поскольку я использовал приведенный ниже код для добавления наблюдателя…

- (void) awakeFromNib {
NSNotificationCenter *nc;
nc = [NSNotificationCenter defaultCenter];

[nc addObserver:self
       selector:@selector(syncKVO:)
           name:NSManagedObjectContextObjectsDidChangeNotification
         object:nil];
}

- (void)syncKVO:(id)sender {
NSNotificationCenter *nc;
nc = [NSNotificationCenter defaultCenter];
[nc removeObserver:self
              name:NSManagedObjectContextObjectsDidChangeNotification
            object:nil];

// Do stuff.

[nc addObserver:self
       selector:@selector(syncKVO:)
           name:NSManagedObjectContextObjectsDidChangeNotification
         object:nil];

}

Но я бы хотел проверить словарь userInfo, чтобы убедиться, что метод действительно должен быть запущен. Как бы я это сделал?

1 Ответ

6 голосов
/ 02 ноября 2009

Просмотр документации для NSManagedObject дает ответ.

Уведомление содержит три метода экземпляра , одним из которых является метод -userInfo, который возвращает userInfo dictionary.

Похоже, ваш syncKVO: метод неверен; обработчики уведомлений должны принимать объект уведомления в качестве параметра.

Документация для искомого уведомления показывает ключи, которые находятся в этом словаре для этого уведомления, и вы можете использовать что-то подобное, чтобы получить то, что вам может понадобиться:

- (void)syncKVO:(NSNotification *)notification {
    NSDictionary *userInfoDictionary = [notification userInfo];
    NSSet *deletedObjects = [userInfoDictionary objectForKey:NSDeletedObjectsKey];

    // do what you want with the deleted objects
}
...