我在我的应用程序中使用 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];
关于ios - NSUserDefaults 和 KVO 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5714161/