2010-10-13 24 views

Respuesta

37

Puede escuchar NSUSerDefaultsDidChange-notificaciones con este:

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

Siempre que se cambie NSUserDefaults, se llamará defaultsChanged.

No olvide llamar al [[NSNotificationCenter defaultCenter] removeObserver:self]; cuando desee dejar de escuchar estas notificaciones (también debe hacer esto cuando el objeto se desasigna).

+0

ah bien, tiene sentido. ahora mi siguiente pregunta es, ¿cómo puedo determinar qué configuración se modificó? – Ben

+3

+1. Normalmente, agregaríaObserver en '-init' (o' -application: didFinishLaunchingWithOptions: 'para el delegado de la aplicación) y eliminaríaObserver en' -dealloc'. Esto es más fácil que hacer un seguimiento de cuántas veces se ha registrado (si agrega Observer dos veces, se le llamará dos veces cada vez que se publique la notificación, IIRC). –

+2

@Ben No hay una manera real de determinar qué configuraciones se cambiaron, pero si busca algo específico, intente almacenar la versión anterior cuando se ejecutan las notificaciones, luego verifique eso la próxima vez. – Emil

0

Escuchar a cambiar en la configuración

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(someMethod:) name:NSUserDefaultsDidChangeNotification object:nil]; 

Recuerde retirar el observador, una vez que este controlador de vista ya no está en la memoria.

11

La sintaxis es para Swift 2. Uso de Swift que haría algo como esto para suscribirse a los cambios de las NSUserDefaults:

NSNotificationCenter.defaultCenter().addObserver(self, selector: "defaultsChanged:", name: NSUserDefaultsDidChangeNotification, object: nil) 

A continuación, cree el método de la siguiente manera:

func defaultsChanged(notification:NSNotification){ 
    if let defaults = notification.object as? NSUserDefaults { 
     //get the value for key here 
    } 
} 
+3

Sintaxis para Swift 3: 'NotificationCenter.default.addObserver (self, selector: #selector (self.defaultsChanged), nombre: UserDefaults.didChangeNotification, object: nil) ' –

2

Un ejemplo acceder a una configuración de tipo Bool específica de la aplicación con la clave "instantWeb":

func observeUserDefaults(notification: NSNotification) { 
    print("Settings changed") 
    if let defaults = notification.object as? NSUserDefaults { 
     if defaults.valueForKey("instantWeb") as! Bool==true { 
      print("Instant Web ON") 
     } 
    } 
} 
-1

En iOS10, intente esto:

UNUserNotificationCenter.current().getNotificationSettings { (settings) in 
    // Your code here 
} 
Cuestiones relacionadas