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