【问题标题】:Storing preferences that ship with the iPhone without a Settings App在没有设置应用程序的情况下存储 iPhone 附带的首选项
【发布时间】:2010-11-15 11:20:18
【问题描述】:

我想发布我的 iPhone 应用程序有一些偏好,但我不需要使用 plist 和所有这些来创建“设置应用程序”。我想使用 NSUserDefaults 执行此操作,并且知道如何使用此类进行存储和检索。但是,当用户第一次加载应用程序时,我正在努力解决如何在那里拥有一组初始偏好。我是否应该在 ViewDidLoad 中检索我的 NSUserDefaults,如果它们返回 nil,则在此时设置它们?还是有更好的方法?

【问题讨论】:

  • 您的建议,我会在您的应用委托的应用程序中执行:didFinishLaunching

标签: iphone


【解决方案1】:

我会按照你的建议去做。检查用户默认键是否已经存在,如果不存在,则使用默认值创建它们。

在哪里执行此检查取决于您,但当然应该在您的应用的任何部分实际需要某些信息之前进行。因此,就像 mbehan 建议的那样,您可能希望在您的 appdelegate 的 didFinishLaunching 中执行该初始化检查。

【讨论】:

    【解决方案2】:

    有一个方法:

    [[NSUserDefaults standardUserDefaults] registerDefaults:aDictionary];
    

    如果用户没有设置任何更具体的内容,该方法将使用 NSUserDefaults 的键/值字典。

    您需要在每次应用启动时调用它。苹果建议:

    注册域的内容没有写入磁盘;您需要在每次应用程序启动时调用此方法。您可以在应用程序的 Resources 目录中放置一个 plist 文件,然后使用从该文件中读取的内容调用 registerDefaults:。

    【讨论】:

      【解决方案3】:

      我花了一些时间查看 iPhone 文档和多个帖子。如果您不想在“设置”应用程序中为您的应用程序创建设置,我认为以下内容足以满足大多数目的。

      这是一个代码 sn-p,您可以将其放入 AppDelegate didFinishLaunching:

          NSString *test = @"Test";
          NSString *testKey = @"TestKey";
          NSString *test2 = @"Test2";
          NSString *test2Key = @"Test2Key";
          NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:test,testKey,test2,test2Key,nil];
          [[NSUserDefaults standardUserDefaults] registerDefaults:dict];
      
          /*
          Alternative if we want to create default values in a file called Defaults.plist in Resources folder
          [[NSUserDefaults standardUserDefaults] registerDefaults:[NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Defaults" ofType:@"plist"]]];
      
           To set the preference within the app:
           NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
           [defaults setObject:@"MyNewTest" forKey:@"TestKey"];
      
           To retrieve the preference within the app:
           NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
           NSString *results = [defaults stringForKey:@"TestKey"];
           Can also use the following syntax:
              intForKey:
              floatForKey:
              boolForKey:
              objectForKey:
                  Returns Objective-C object like NSString, NDDate, or NSNumber
                  If the object is not a string, may need to specify the value, such as
                  Label.text = [[defaults objectForKey:@"TestPreferenceStoredAsNumber"]stringValue];
           */ 
      

      在 AppDelegate applicationWillTerminate 和 applicationDidEnterBackground 中放置以下内容:

          [[NSUserDefaults standardUserDefaults]synchronize];
      

      然后查看首选项,将此代码放在方便的位置:

          // View all keys and values in Console
          NSLog(@"%@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);
      

      【讨论】:

      • 谢谢乔恩。忘记了 appWillTerminate 和 appDidEnterBackground 中的同步。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多