【发布时间】:2011-08-08 12:30:29
【问题描述】:
我在我的应用程序中使用 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 中。我做错了什么?
【问题讨论】:
-
在一个有点不相关的注释中,
synchronise()的文档指出:“等待对默认数据库的任何挂起的异步更新并返回;此方法是不必要的,不应使用。”跨度> -
如果遇到问题,请查看 NSUserdefaults 的作者之一的这篇非常详细的博客文章:dscoder.com/defaults.html
标签: ios