iOS NSUserDefaults Отслеживание изменения значений для одного ключа

У меня есть следующий код, предназначенный для перехвата события изменения значения 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 никогда не вызывалось.

14
задан Community 23 May 2017 в 12:34
поделиться