Tengo el siguiente código para detectar el evento de un valor de NSUserDefaults que cambia para una clave en particular.iOS NSUserDefaults Viendo el cambio de valores para una sola clave
[[NSUserDefaults standardUserDefaults] addObserver:self
forKeyPath:SOME_NSSTRING_VARIABLE
options:NSKeyValueObservingOptionNew
context:NULL];
- (void)observeValueForKeyPath:(NSString *) keyPath ofObject:(id) object change:(NSDictionary *) change context:(void *) context
{NSLog (@"Changed for key %@", keyPath); }
Pero observeValueForKeyPath nunca recibe una llamada. Incluso traté de reemplazar SOME_NSSTRING_VARIABLE con una cadena como se menciona en Observing value changes to an NSUserDefaults key pero no me ha ayudado.
Actualización: Estoy cambiando los NSUserDefaults de una pestaña. El código anterior para monitorear los cambios se encuentra en una pestaña diferente del mismo control tabviewcontroller. En la pestaña donde vigilo si los cambios (la pestaña en que existe el código de seguridad), si añado una:
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
// NSLog(@"viewillappear");
NSUserDefaults *FUDefaults = [NSUserDefaults standardUserDefaults];
NSLog(@"The username obtained is: %@", [FUDefaults objectForKey:SOME_NSSTRING_VARIABLE]);
}
el valor actualizado NSUserDefaults se obtiene correctamente, pero el observeValueForKeyPath nunca fue llamado.
Por favor enviar el código en el que cambia el variable también – trapper
También lo tomo tiene '[[NSUserDefaults st andardUserDefaults] addObserver ... 'inside' viewDidLoad'? – trapper
NSUserDefaults * FDefaults = [NSUserDefaults standardUserDefaults]; [FDefaults setObject: userName.text forKey: SOME_NSSTRING_VARIABLE]; [[NSUserDefaults standardUserDefaults] synchronize]; –