我在我的应用程序中使用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”是我在Root.plist中设置的项目标识符,在Settings.bundle中.我究竟做错了什么?
解决方法
我建议使用适当的通知:
NSUserDefaultsDidChangeNotification.
在XCode中的Apple文档中搜索AppPrefs,它将显示一个示例应用程序,它完全符合您的要求.只需编译并运行!它利用了NSUserDefaultsDidChangeNotification.
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(defaultsChanged:) name:NSUserDefaultsDidChangeNotification object:nil];