2012-03-18 121 views
2

我用這個代碼來保存:NSUserDefaults的不保存我的價值

[[NSUserDefaults standardUserDefaults] setValue:@"vruch" forKey:@"nastoikaIP"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 

,這代碼加載:

NSString* automanual = [[NSUserDefaults standardUserDefaults] 
         valueForKey:@"nastroikaIP"]; 

if ([automanual isEqualToString:@"vruch"]) { 
    autovruch.selectedSegmentIndex = 1; 
    [self obnovittext]; 
} 

回答

11

你不應該使用的方法setValue:(從NSKeyValueCoding協議)但setObject:(來自NSUserDefaults類)來存儲字符串。

[[NSUserDefaults standardUserDefaults] setObject:@"vruch" forKey:@"nastroikaIP"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 

可以使用方法stringForKey:

NSString* automanual = [[NSUserDefaults standardUserDefaults] stringForKey:@"nastroikaIP"]; 

最後,請注意,它通常是更好地定義常量爲你NSUserDefaults使用,以避免任何錯誤輸入錯誤的鑰匙,這可能是檢索字符串當它們發生時很難調試。

編輯

它看起來像你已經做了一個錯誤輸入錯誤nastoikaIP!= nastroikaIP。注意丟失/額外的r字母。

+0

我複製你的代碼到我的項目,但它仍然不爲我工作。 setObject只是一個「ID」,或者它可能是一個「字符串」? – 2012-03-18 18:32:08

+0

@HorheGarcia - 那麼,我所說的關於使用常量已經發生了。你可以用'nastoikaIP'這個鍵來設置這個值,然後用一個不同的鍵'nastroikaIP'來檢索它。我不知道這是什麼語言,但有一個額外的'r'或缺少'r'。 – sch 2012-03-18 18:40:45

+0

謝謝你,sch,你絕對是對的! – 2012-03-18 18:41:13

1

你保存字符串,所以你需要的setObject而不是setValue方法

[[NSUserDefaults standardUserDefaults] setObject:@"vruch" forKey:@"nastoikaIP"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 

,並改變它的加載藏漢

NSString* automanual = [[NSUserDefaults standardUserDefaults] objectForKey:@"nastroikaIP"]; 

if ([automanual isEqualToString:@"vruch"]) { 
autovruch.selectedSegmentIndex = 1; 
[self obnovittext]; 
} 
+0

我試過你的代碼,但對不起,它不適用於我..似乎我做錯了什麼。 – 2012-03-18 18:33:17

+1

嘗試NSLog(@「%@」,[[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);查看您實際使用的值和密鑰。 – EricS 2012-03-18 20:38:13