我在我的应用程序中使用NSUserDefaults,我想在特定的值被更改时得到通知。 为此,我在viewDidLoad中添加了以下行:
NSUserDefaults *settings = [NSUserDefaults standardUserDefaults];
[settings synchronize];
[settings addObserver:self forKeyPath:@"pref_server" options:NSKeyValueObservingOptionNew context:NULL];
并且通知的方法:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
NSLog(@"Change");
NSUserDefaults *settings = [NSUserDefaults standardUserDefaults];
if (object == settings && [keyPath isEqualToString:@"pref_server"])
{
NSLog(@"Server did change");
}
}
不幸的是,后者从未被调用... @“pref_server”是我在Settings.bundle中设置的Root.plist中的项目标识符。我做错了什么?
synchronise()
的文档声明:“等待默认数据库的所有待处理异步更新完成后返回。该方法是不必要的,不应被使用。” - Yunus Nedim Mehel