为什么使用registerDefaults:而不是setValue:forKey:? [英] Why use registerDefaults: instead of setValue:forKey:?

查看:545
本文介绍了为什么使用registerDefaults:而不是setValue:forKey:?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我为我的应用设置默认首选项时,我正在执行以下操作:

When I'm setting up the default preferences for my app, I'm doing the following:

1)阅读 Root.plist Settings.bundle 里面进入字典。

1) Reading Root.plist from inside Settings.bundle into a dictionary.

2)我测试一下如果没有设置首选项,我将通过 [NSUserDefaults standardUserDefaults] registerDefaults注册我的默认字典:]

2) I test if a preference is set, and if not I'm registering my defaults dictionary via [NSUserDefaults standardUserDefaults] registerDefaults:]

问题是,使用 registerDefaults:注册的默认值不会转到持久性存储,因此如果用户从不更改其首选项,我将读取我的默认首选项并使用<$ c注册它们每次应用启动时,$ c> NSUserDefaults 。

Problem is, defaults registered with registerDefaults: do not go to the persistent store, so if the user never changes their preferences I am reading my default preferences and registering them with NSUserDefaults every time the app launches.

我可以使用 setValue:forKey: registerDefaults: $ c>并将我的默认设置转到持久存储,绕过了构建和安装的需要在每次发布时注册字典。但是,Apple的文档示例代码都指向 registerDefaults:

Instead of using registerDefaults: I could use setValue:forKey: and have my default setting go to the persistent store, bypassing the need to build & register a dictionary on each launch. However, Apple's documentation and sample code both point to registerDefaults:.

所以我想弄清楚何时以及为什么要使用 registerDefaults:以及何时/为什么我应该使用 setValue:forKey:而不是?

So I'm trying to figure out when and why I should use registerDefaults: and when/why I should use setValue:forKey: instead?

推荐答案


问题是,在registerDefaults注册的默认值:不要去持久存储,所以如果用户从不更改他们的首选项,我正在读取我的默认首选项,并在每次应用程序启动时使用NSUserDefaults注册它们。

Problem is, defaults registered with registerDefaults: do not go to the persistent store, so if the user never changes their preferences I am reading my default preferences and registering them with NSUserDefaults every time the app launches.

是的。为什么这是一个问题?为什么要在代码中写入你拥有的磁盘内容?

Yes. Why is that a problem? Why write to disk things you have in the code already?


而不是使用registerDefaults:我可以使用setValue:forKey:并拥有我的默认值设置去持久性商店,绕过了建立&在每次发布时注册字典。但是,Apple的文档和示例代码都指向registerDefaults:。

Instead of using registerDefaults: I could use setValue:forKey: and have my default setting go to the persistent store, bypassing the need to build & register a dictionary on each launch. However, Apple's documentation and sample code both point to registerDefaults:.

只有在您第一次检查是否设置了这个值?没有?好的,现在设定它。这比使用 registerDefaults:更多的代码和成本。

Only if you first checked "is this value set? No? OK, now set it." That's more code and cost than just using registerDefaults:.

你应该使用 registerDefaults: 设置默认值。您应该使用 setValue:forKey:来保存有效设置的值。

You should use registerDefaults: to set the defaults. You should use setValue:forKey: to save values that are actively set.

还要记住 NSUserDefaults 也存在于Mac上。在那里,用户可以使用 defaults 命令直接访问设置,因此该程序不是唯一可以修改此商店的实体。

Remember also that NSUserDefaults exists on Mac as well. There, the user can directly access the settings with the defaults command, so the program is not the only entity that can modify this store.

这篇关于为什么使用registerDefaults:而不是setValue:forKey:?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆