【问题标题】:iPhone and NSUserDefaultsiPhone 和 NSUserDefaults
【发布时间】:2010-12-05 11:37:13
【问题描述】:

在我的 viewWillLoad: 方法中,我目前正在执行以下操作:

- (void)viewWillAppear:(BOOL)animated {
   NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
   if ( [defaults boolForKey:@"enabled_preference"] ) {
      ...   
   } else {
      ...   
   }
   [super viewWillAppear:animated];
}

如果我在打开首选项窗格(使用普通 Settings.bundle 构建)之前构建并运行应用程序,那么 bool 似乎是 NO (或者更可能 nil) 而不是默认的 YES。但是,如果我在打开应用程序之前打开设置应用程序并查看应用程序首选项窗格,一切都会按预期工作。

我假设应用程序首选项没有初始化,我应该将它们初始化为应用程序委托中的默认值(如果尚未设置)。有人可以证实这一点吗?还是我在这里遗漏了其他明显的东西?

【问题讨论】:

    标签: iphone objective-c settings preferences nsuserdefaults


    【解决方案1】:

    您应该使用-registerDefaults: 在代码中提供默认值。这通常在 +initialize 方法中完成,用于任何使用设置的类。见Using NSUserDefaults

    【讨论】:

      【解决方案2】:

      使用初始化方法有效,但我喜欢this other answer on stackoverflow,它具有从包中读取默认值并使用它们初始化默认值的代码。这样您就不必在代码中硬编码默认设置,它们位于它们所属的 plist 中。

      【讨论】:

      • 是的。这几乎就是我最终要做的事情,尽管我们必须这样做是 API 中的一个很大的空白。毕竟,Objective-C 就是不必编写大量的临时代码。
      猜你喜欢
      • 1970-01-01
      • 2011-07-12
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      • 2013-02-09
      • 1970-01-01
      • 2011-09-29
      • 1970-01-01
      相关资源
      最近更新 更多