Cómo determinar cuándo la configuración cambia en iOS

root.plist un paquete personalizado Settings.app con el enfoque estándar de root.plist para iPhone. Me pregunto si hay una manera de determinar cuándo el usuario cambia esa configuración en mi aplicación …

Puede escuchar NSUSerDefaultsDidChange-notificaciones con esto:

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

Cada vez que cambie NSUserDefaults, se invocará defaultsChanged .

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

La syntax es para Swift 2. Usando Swift, haría algo como esto para suscribirse a los cambios para NSUserDefaults:

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

Luego crea el método de esta manera:

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

Regístrese para recibir notificaciones NSUserDefaultsDidChangeNotification . No es obvio, pero la Guía de progtwigción de aplicaciones de iOS lo describe así:

Las preferencias que expone su aplicación a través de la aplicación de Configuración se cambian

Un ejemplo de acceso a una configuración de tipo de 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") } } } 

Escucha el cambio en la configuración

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

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

SWIFT 4

Observador de registro en viewController,

 NotificationCenter.default.addObserver(self, selector: #selector(settingChanged(notification:)), name: UserDefaults.didChangeNotification, object: nil) 

Implementación del selector

  @objc func settingChanged(notification: NSNotification) { if let defaults = notification.object as? UserDefaults { if defaults.bool(forKey: "enabled_preference") { print("enabled_preference set to ON") } else { print("enabled_preference set to OFF") } } } 

En iOS10, prueba esto:

 UNUserNotificationCenter.current().getNotificationSettings { (settings) in // Your code here } 
    Intereting Posts