0

我知道关于存储 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;
}

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

如何设置默认值,然后让用户更改它而不在应用程序启动时被覆盖?

谢谢

4

3 回答 3

4

你应该使用 registerDefaults: 为此

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
 // ...
    [NSUserDefaults standardUserDefaults] registerDefaults:@{@"defaultLocation" : @"Washington, DC"}];
// ...
    return YES;
}
于 2013-03-09T04:35:30.463 回答
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;
}
于 2013-03-09T04:28:50.377 回答
0

NSUserDefaults是一个可供整个应用程序使用的单例。您可以随时通过以下方式调用它:

[NSUserDefaults standardUserDefaults]

用户不能直接与之交互,您必须收集数据然后存储它。要设置一个值:

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

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

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

参考

于 2013-03-09T04:31:57.290 回答