我应该在哪里存储NSUserDefaults以便我可以更新它们?

时间:2013-03-09 04:23:23

标签: objective-c ios6 nsuserdefaults appdelegate

我知道有一些关于存储userDefaults的问题,所以每个人都可以使用。目前我在AppDelegate中有我的,它正在工作。但是,我现在想要根据用户首选项更新默认设置。

但是,当用户退出应用并再次启动时,它只会再次从头开始创建默认值。

#import "AppDelegate.h"

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.

    NSUserDefaults *sharedPref = [NSUserDefaults standardUserDefaults];
    [sharedPref setObject:@"Washington, DC" forKey:@"defaultLocation"];
    //  

    return YES;
}

显然,每次应用程序打开时都会设置此选项,从而使用户选择过时。

如何设置默认值,然后让用户更改默认设置,然后在应用启动时覆盖?

由于

3 个答案:

答案 0 :(得分:4)

你应该使用registerDefaults:那个

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
 // ...
    [NSUserDefaults standardUserDefaults] registerDefaults:@{@"defaultLocation" : @"Washington, DC"}];
// ...
    return YES;
}

答案 1 :(得分:1)

以下代码会检查应用是否已启动。它旨在取代-registerDefaults:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    if(![[NSUserDefaults standardUserDefaults] boolForKey:@"setupApp"])
        {
            NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
            [defaults setBool:YES forKey:@"setupApp"];
            [defaults setObject:@"Washington, DC" forKey:@"defaultLocation"];

            [defaults synchronize];
        }
    return YES;
}

答案 2 :(得分:0)

NSUserDefaults是整个应用程序可用的单例。您可以随时通过以下方式拨打电话:

[NSUserDefaults standardUserDefaults]

用户无法直接与其进行交互,您必须收集数据然后存储它。设置值:

[[NSUserDefaults standardUserDefaults] setObject:@"Some Value" forKey:@"MyKey"];
[[NSUserDefaults standardUserDefaults] synchronize];  // to save

用户默认值将在应用程序启动之间保持不变。

您必须小心设置对象,只能在用户默认值中设置属性列表类型。

Ref