2010-07-02 1 views
23

После долгих поисков я не смог найти погоду вам нужно передать объект словаря в:Как получить NSUserDefaultsDidChangeNotification Iphone

[NSUserDefaultsDidChangeNotification addObserver: forKeyPath: options: context:]; 

и что должно быть предусмотрено в настройках, если я хочу, чтобы получать уведомления на даже одно изменение в userDefaults. И что такое ключевой путь?

Thanx заранее.

ответ

66

NSUserDefaultsDidChangeNotification только уведомление, которое посылается, когда по умолчанию меняются. Для того, чтобы слушать для него вам нужен этот код:

NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; 
    [center addObserver:self 
       selector:@selector(defaultsChanged:) 
        name:NSUserDefaultsDidChangeNotification 
       object:nil]; 

Это будет вызывать метод defaultsChanged: когда уведомление обжигают. Вы должны реализовать этот метод так:

- (void)defaultsChanged:(NSNotification *)notification { 
    // Get the user defaults 
    NSUserDefaults *defaults = (NSUserDefaults *)[notification object]; 

    // Do something with it 
    NSLog(@"%@", [defaults objectForKey:@"nameOfThingIAmInterestedIn"]); 
} 
+0

Thanx deanWombourne, именно то, что я искал ... – neha

+13

Важно удалить наблюдателя в методе dealloc. Если уничтоженный класс все еще зарегистрирован как наблюдатель, приложение будет аварийно завершено после уведомления. Использовать: [[NSNotificationCenter defaultCenter] removeObserver: self]; – maralbjo

+0

Это вызывает ошибку. Кто-то может смотреть на него в течение 15 минут, задаваясь вопросом, что они сделали неправильно, чтобы узнать, что «уведомление» написано неправильно. Просто FYI – RyeMAC3