当我为我的应用设置默认首选项时,我正在执行以下操作:
1)从Root.plist
内部阅读Settings.bundle
到字典中。
2)我测试是否设置了首选项,如果不是,我通过[NSUserDefaults standardUserDefaults] registerDefaults:]
问题是,使用registerDefaults:
注册的默认值不会转到持久性存储,因此如果用户从未更改其首选项,那么每次应用启动时,我都会读取默认首选项并使用NSUserDefaults
注册它们。
我可以使用registerDefaults:
而不是使用setValue:forKey:
,并将我的默认设置转到持久存储,而不需要构建&在每次发布时注册字典。但是,Apple的documentation和sample code都指向registerDefaults:
。
所以我想弄清楚何时以及为什么要使用registerDefaults:
以及何时/为什么我应该使用setValue:forKey:
?
答案 0 :(得分:5)
问题是,使用registerDefaults注册的默认值:不要去持久存储,所以如果用户从不更改他们的首选项,我会读取我的默认首选项,并在每次启动应用时使用NSUserDefaults注册它们。
是。为什么这是一个问题?为什么要在代码中写入你拥有的东西?
而不是使用registerDefaults:我可以使用setValue:forKey:并将我的默认设置转到持久性存储,绕过了构建和安装的需要。在每次发布时注册字典。但是,Apple的文档和示例代码都指向registerDefaults:。
只有你第一次检查“这个值是否设定?否?好的,现在设置它。”这比使用registerDefaults:
更多的代码和成本。
您应该使用registerDefaults:
来设置默认值。您应该使用setValue:forKey:
来保存有效设置的值。
另请注意,Mac上也存在NSUserDefaults
。在那里,用户可以使用defaults
命令直接访问设置,因此程序不是唯一可以修改此商店的实体。