У меня есть следующий код, предназначенный для перехвата события изменения значения NSUserDefaults для определенного ключа.
[[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); }
Но методObservValueForKeyPath никогда не вызывается. Я даже пытался заменить SOME_NSSTRING_VARIABLE строкой, как указано в Наблюдение за изменением значения на ключ NSUserDefaults, но это не помогло.
Обновление: Я меняю NSUserDefaults из вкладки. Приведенный выше код для отслеживания изменений находится на другой вкладке того же tabviewcontroller. На вкладке, где я отслеживаю изменения (вкладка, где существует приведенный выше код), если я добавлю:
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
// NSLog(@"viewillappear");
NSUserDefaults *FUDefaults = [NSUserDefaults standardUserDefaults];
NSLog(@"The username obtained is: %@", [FUDefaults objectForKey:SOME_NSSTRING_VARIABLE]);
}
, обновленное значение NSUserDefaults будет получено правильно, но наблюдениеValueForKeyPath никогда не вызывалось.