我有以下代码,旨在捕获特定键的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 从未被调用。 我甚至尝试使用字符串替换 SOME_NSSTRING_VARIABLE,如 Observing value changes to an NSUserDefaults key 中所述,但这并没有帮助。更新: 我正在从选项卡视图更改 NSUserDefaults。 监听更改的上述代码位于同一选项卡视图控制器的不同选项卡中。 如果我在监视更改的选项卡中(存在上述代码的选项卡)添加“:”,则会发生什么。
- (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...
吗? - trapperSOME_NSSTRING_VARIABLE
不包含任何点,因为keyPath
不应该被命名空间化以进行 KVO。 - Yunus Nedim Mehel