我试图找出如何从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];
会存储下次运行应用程序时的值,但是没有这样的值运气。
答案 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)
注册域的内容不会写入磁盘;每次应用程序启动时都需要调用此方法。您可以将plist文件放在应用程序的Resources目录中,并使用从该文件中读取的内容调用registerDefaults:。
换句话说,您没有通过注册这样的默认值来存储任何内容。要在您的应用和设置包中都有默认值,您必须按照here所述单独维护设置包。
答案 3 :(得分:0)
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[NSUserDefaults removeObjectForKey:@"userDefaults"];
[userDefaults setObject:[settings objectForKey:@"mainData"] forKey:@"userDefaultsValue"];
[userDefaults synchronize];