2010-07-02 5 views
23

Nach viel suchen zu erhalten, war ich nicht in der Lage zu finden wheather Sie ein Wörterbuch Objekt zu übergeben müssen:Wie NSUserDefaultsDidChangeNotification iphone

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

und was sollte in den Optionen zur Verfügung gestellt werden, wenn ich will für benachrichtigt werden sogar eine einzige Änderung in den userDefaults. Auch was ist keypath?

Vielen Dank im Voraus.

Antwort

66

NSUserDefaultsDidChangeNotification ist nur eine Benachrichtigung, die gesendet wird, wenn die Standardwerte geändert werden. So hören Sie auf ihn benötigen Sie diesen Code:

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

Dies wird die Methode aufrufen defaultsChanged: wenn die Benachrichtigung ausgelöst wird. Sie müssen diese Methode wie folgt umzusetzen:

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

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

Thanx deanWombourne, genau das, was ich gesucht habe ... – neha

+13

Es ist wichtig, den Beobachter im dealloc Verfahren zu entfernen. Wenn eine zerstörte Klasse weiterhin als Beobachter registriert ist, stürzt die App bei Benachrichtigung ab. Verwenden Sie: [[NSNotificationCenter defaultCenter] removeObserver: self]; – maralbjo

+0

Dies wirft einen Fehler auf. Jemand könnte es 15 Minuten lang anstarren und sich fragen, was sie falsch gemacht haben, um herauszufinden, dass die "Benachrichtigung" falsch geschrieben ist. Nur ein FYI – RyeMAC3