【发布时间】:2012-05-28 12:09:21
【问题描述】:
我有以下代码旨在捕获特定键的 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 永远不会被调用。我什至尝试用Observing value changes to an NSUserDefaults key 中提到的字符串替换 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。
【问题讨论】:
-
请把你修改变量的代码贴出来
-
我也认为你在
viewDidLoad里面有[[NSUserDefaults standardUserDefaults] addObserver...? -
NSUserDefaults *FDefaults = [NSUserDefaults standardUserDefaults]; [FDefaults setObject:userName.text forKey:SOME_NSSTRING_VARIABLE]; [[NSUserDefaults standardUserDefaults] 同步];
-
是的,我只有在 viewDidLoad 函数里面有 addObserver...
-
在同一问题上挣扎了一整天后:确保
SOME_NSSTRING_VARIABLE不包含任何点,因为不应为keyPath命名空间以执行KVO。
标签: ios nsuserdefaults