繁体   English   中英

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

[英]Storing values from NSUserDefaults in Settings bundle

我试图找出如何从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]; 将存储下次运行应用程序时的值,但没有这样的运气。

而不是使用

[[NSUserDefaults standardUserDefaults] registerDefaults:settings];

尝试这个:

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

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

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

我在使用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

文档

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

换句话说,您没有通过注册这样的默认值来存储任何内容。 中都有您的应用程序,并在设置捆绑默认值,你必须保持作为讨论的设置分别捆绑在这里

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM