2012-03-18 98 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