iPhone和NSUserDefaults

iPhone和NSUserDefaults,iphone,objective-c,settings,preferences,nsuserdefaults,Iphone,Objective C,Settings,Preferences,Nsuserdefaults,在我的viewWillLoad:method中,我目前正在做以下工作: - (void)viewWillAppear:(BOOL)animated { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; if ( [defaults boolForKey:@"enabled_preference"] ) { ... } else { ... } [su

在我的viewWillLoad:method中,我目前正在做以下工作:

- (void)viewWillAppear:(BOOL)animated {
   NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
   if ( [defaults boolForKey:@"enabled_preference"] ) {
      ...   
   } else {
      ...   
   }
   [super viewWillAppear:animated];
}
如果我在打开首选项窗格(使用普通的Settings.bundle构建)之前构建并运行应用程序,那么bool似乎是NO(或者更可能是nil),而不是默认的YES。但是,如果在打开应用程序之前打开“设置”应用程序并查看“应用程序首选项”窗格,则一切正常


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

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

使用initialize方法是可行的,但我喜欢使用代码从bundle中读取默认值并使用它们初始化默认值。这样,您就不必在代码中硬编码默认设置,它们位于它们所属的plist中。

是的。这几乎就是我最后所做的,尽管我们必须这样做的API中有一个很大的漏洞。Objective-C毕竟是关于不必编写大量的make-work代码。