在“设置”包中存储NSUserDefaults中的值

时间:2012-05-23 12:42:28

标签: iphone objective-c cocoa-touch

我试图找出如何从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 个答案:

答案 0 :(得分:2)

而不是使用

[[NSUserDefaults standardUserDefaults] registerDefaults:settings];

试试这个:

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

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

NSLog(@"IDMissiles:%@[[[NSUserDefaultsstandardUserDefaults]objectForKey:@"settings"]objectForKey:@"IDMissiles"]);

答案 1 :(得分: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

答案 2 :(得分:1)

来自documentation

  

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

换句话说,您没有通过注册这样的默认值来存储任何内容。要在您的应用和设置包中都有默认值,您必须按照here所述单独维护设置包。

答案 3 :(得分:0)

   NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
   [NSUserDefaults removeObjectForKey:@"userDefaults"];
   [userDefaults setObject:[settings objectForKey:@"mainData"] forKey:@"userDefaultsValue"];
   [userDefaults synchronize];