1

我试图找出如何从 NSDefaults 保存/存储我的值,以便当我退出应用程序时,它们将存储在 Settings.bundle 中。这就是我正在做的...

NSDictionary *settings = [NSDictionary dictionaryWithObjectsAndKeys:@"M1", @"IDMissiles", 
                                                                    @"G2", @"IDGuns", 
                                                                    @"B3", @"IDBombs",
                                                                    @"KM", @"IDDistance", nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:settings];

如果我执行以下操作,值将从 NSUserDefaults 正确打印出来......

NSLog(@"IDMissiles: %@", [userDefaults stringForKey:@"IDMissiles"]);
NSLog(@"IDGuns    : %@", [userDefaults stringForKey:@"IDGuns"]);
NSLog(@"IDBombs   : %@", [userDefaults stringForKey:@"IDBombs"]);
NSLog(@"IDDistance: %@", [userDefaults stringForKey:@"IDDistance"]);

但是......每次我运行应用程序时,NSUserDefaults 中的值都以(null)开始,我想这样做[[NSUserDefaults standardUserDefaults] synchronize];会在我下次运行应用程序时存储这些值,但没有这样的运气。

4

4 回答 4

2

而不是使用

[[NSUserDefaults standardUserDefaults] registerDefaults:settings];

尝试这个:

[[NSUserDefaults standardUserDefaults] setObject:settings forKey:@"settings"];

然后,从这样的默认值中获取:

NSLog(@"IDMissiles:%@[[[NSUserDefaultsstandardUserDefaults]objectForKey:@"settings"]objectForKey:@"IDMissiles"]);
于 2012-05-23T13:00:36.953 回答
1

文档中:

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

换句话说,您不会通过像这样注册默认值来存储任何内容。要在您的应用程序和设置包中都有默认值,您必须单独维护设置包,如此所述。

于 2012-05-23T13:13:20.857 回答
1

我在使用 settings.bundle 时发现的一件事是,在您实际打开设置窗格之前,没有任何值被初始化。您可以在此处保存默认值,但在您打开设置之前它们将返回 nil。

我不确定当您尝试在那里保存值但从不打开设置窗格时是否会发生这种情况。

如果您不使用设置窗格,那么您不会想使用 registerDefaults 选项。

试试这个。

[[NSUserDefaults standardDefaults] setObject:@"M1" forKey:@"IDMissiles"];
// set remaining values
[[NSUserDefaults standardDefaults] synchronize]; // this really only needs to be called if you plan on accessing values right away, otherwise they are saved automatically after the next run loop
于 2012-05-23T13:05:58.930 回答
0
   NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
   [NSUserDefaults removeObjectForKey:@"userDefaults"];
   [userDefaults setObject:[settings objectForKey:@"mainData"] forKey:@"userDefaultsValue"];
   [userDefaults synchronize];
于 2012-05-23T13:13:36.960 回答