9

我已阅读并理解NSUserDefaults可用于将我的应用程序的首选项保存到文件系统的方式。我也意识到需要先注册默认值,然后再在应用程序中使用它们。

但是,我不确定是否可以在我的应用程序中注册各种类的默认值。例如,在AppDelegate我想注册属于整个应用程序的首选项,但在主题类中我想使用(并因此注册)仅用于获取和设置应​​用程序主题的首选项。就用户默认值而言,更多类将有自己的需求,因此这适用于我从事的任何项目的多个部分。

这种将偏好与它们属于正确工作方式的类保持一致的方式吗?

4

4 回答 4

14

是的,您可以注册多个类的默认值。当您注册一个新的默认值时,它只是将该新的键/值对添加到注册域(应用程序只有一个)。我认为你这样做的方式很合理。

于 2012-10-04T20:02:17.087 回答
2

NSUserDefaults 与整个应用程序相关。因此,在哪里读取/存储它们并不重要:即使将它们设置在另一个类中,任何类都可以看到这些键。

我个人尝试使用我自己的方案,因此相关的偏好可能是“接近”的。

IE:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:themePreferences forKey:@"Theme"];
[defaults setObject:otherPreferences forKey:@"Other"];

希望能帮助到你。

于 2012-10-04T18:38:36.743 回答
1

这不是必需的,但是如果您想按类对首选项文件进行分区,则可以将类名作为键的一部分。例如:

NSString *prefKey = [ NSString stringWithFormat: @"%s.prefName", (const char *) class_getName([ self class ]) ];

prefName您存储的任何首选项的名称在哪里。这样,您可以对不同的类使用相同的首选项名称,而不必担心它们会相互覆盖。但正如其他人所说,除非您有特定的需要这样做,否则NSUserDefaults可以从应用程序中的任何位置调用。

于 2012-10-04T19:24:22.830 回答
0

如果您使用[NSUserDefaults standardUserDefaults]它将在整个应用程序中共享。您可以将自己的默认类用于特定于类的设置。

于 2012-10-04T18:36:43.643 回答