iPhone 和 NSUserDefaults

Posted

技术标签:

【中文标题】iPhone 和 NSUserDefaults【英文标题】:iPhone and 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。但是,如果我在打开应用程序之前打开设置应用程序并查看应用程序首选项窗格,一切都会按预期工作。

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

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

【讨论】:

是的。这几乎就是我最终要做的事情,尽管我们必须这样做是 API 中的一个很大的空白。毕竟,Objective-C 就是不必编写大量的临时代码。

以上是关于iPhone 和 NSUserDefaults的主要内容,如果未能解决你的问题,请参考以下文章

为 iPhone 和 iPhone 4 开发之间有啥变化?

设置图像以适合 iPhone 5 和 iPhone 6

iOS关于iPhone6和iPhone6 Plus的屏幕适配问题

iPhone - iphone 中的数据源和委托方法是啥? [复制]

iPhone 7 plus 和其他 iPhone 的不同限制

区分 iPhone 3G 和 iPhone 3GS