在没有设置应用程序的情况下存储iPhone附带的首选项

时间:2010-11-15 11:20:19

标签: iphone

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

3 个答案:

答案 0 :(得分:1)

我会像你提议的那样做。检查用户默认密钥是否已存在,如果不存在,请使用默认值创建它们。

你做这个检查取决于你,但当然它应该在你的应用程序的任何部分实际需要一些信息之前发生。因此,像mbehan建议的那样,您可能希望在appdelegate的didFinishLaunching中执行初始化检查。

答案 1 :(得分:1)

有一种方法:

[[NSUserDefaults standardUserDefaults] registerDefaults:aDictionary];

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

每次应用启动时都需要调用此方法。 Apple建议:

  

注册域的内容不会写入磁盘;每次应用程序启动时都需要调用此方法。您可以将plist文件放在应用程序的Resources目录中,并使用从该文件中读取的内容调用registerDefaults:。

答案 2 :(得分:0)

我花了一些时间来审核iPhone文档和多个帖子。如果您不想在“设置”应用程序中为应用程序创建设置,我认为以下内容适用于大多数用途。

以下是您可以在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]);