我有以下代码旨在捕获特定键的 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); }
但是observeValueForKeyPath 永远不会被调用。我什至尝试用观察 NSUserDefaults 键的值更改中提到的字符串替换 SOME_NSSTRING_VARIABLE ,但它没有帮助。
更新:我正在从 tabview 更改 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 值,但从未调用过 observeValueForKeyPath。