2012-05-23 40 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];