2010-07-02 24 views
23

Después de un montón de búsqueda no fue capaz de encontrar tiempo lo que necesita para pasar un objeto de diccionario para:Cómo recibir NSUserDefaultsDidChangeNotification iPhone

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

y lo que debe ser proporcionada en las opciones si quiero ser notificado de incluso un solo cambio en los userDefaults. Además, ¿qué es Keypath?

Gracias por adelantado.

Respuesta

66

NSUserDefaultsDidChangeNotification es solo una notificación que se envía cuando se modifican los valores predeterminados. Para escuchar a cabo para ello necesita este código:

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

Esto llamará al método defaultsChanged: cuando se dispara la notificación. Es necesario poner en práctica este método como este:

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

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

Gracias deanWombourne, exactamente lo que estaba buscando ... – neha

+13

Es importante eliminar el observador en el método dealloc. Si una clase destruida todavía está registrada como un observador, la aplicación se bloqueará al recibir la notificación. Uso: [[NSNotificationCenter defaultCenter] removeObserver: self]; – maralbjo

+0

Esto arroja un error. Alguien puede estar mirándolo durante 15 minutos preguntándose qué hicieron mal para descubrir que la "notificación" se deletrea mal. Solo un FYI – RyeMAC3

Cuestiones relacionadas