2012-05-23 44 views
1

我想了解如何从NSDefaults保存/存储我的值,以便在退出应用程序时将它们存储在Settings.bundle中。这是我在做什么...从设置包中存储NSUserDefaults的值

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];会在下次运行应用程序时存储这些值,但没有这样的运气。与settings.bundle工作时

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

指这样:[registerDefaults](https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/nsuserdefaults_Class/Reference/Reference.html#//apple_ref/occ/instm/NSUserDefaults/registerDefaults :) – Hector

+0

注册域的内容不写入磁盘;每次启动应用程序时都需要调用此方法 – Hector

回答

1

有一件事,我发现:

2

而不是使用

[[NSUserDefaults standardUserDefaults] registerDefaults:settings]; 

的尝试:

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

然后,从违约得到这样的在你真正打开设置窗格之前,没有任何值会被初始化。您可以在那里保存默认值,但在打开设置之前它们将返回零。

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

如果您不使用设置窗格,那么您不想使用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 
1

documentation

登记域的内容不被写入磁盘;每次启动应用程序时都需要调用此方法。您可以在应用程序的资源目录中放置一个plist文件,并调用registerDefaults:您从该文件读入的内容。

换句话说,您没有通过注册这样的默认值来存储任何东西。要在您的应用程序和设置包中使用默认值,您必须分别维护设置包,如讨论here所述。

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