NSUserDefaults不保存

时间:2010-05-18 21:54:59

标签: iphone xcode ipad ios-simulator nsuserdefaults

我正在尝试在iphone / ipad应用程序中保存一些信息。 问题是它可以工作,但如果我关闭应用程序(使用模拟器上的主页按钮或使用cmd + q关闭)信息将丢失!

这是我的代码(如果你看到,我使用了“syncronize”)

- (IBAction)choose1{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:@"choose1" forKey:@"choose"];
    [defaults synchronize]; 
}

- (IBAction)choose2{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:@"choose2" forKey:@"choose"];
    [defaults synchronize];
}

- (IBAction)openview{
    NSString *var = [[NSUserDefaults standardUserDefaults] objectForKey:@"choose"];
    if (var == @"choose1"){
        [self pushViewController:view1 animated:YES];}
    else if (var == @"choose2"){
        [self pushViewController:view2 animated:YES];
    }

}

我不明白为什么:(

3 个答案:

答案 0 :(得分:2)

比较字符串时,应使用isEqualToString方法,即:

if ([var isEqualToString:@"choose1"]){

否则,您正在比较实际对象而不是其内容。

答案 1 :(得分:1)

我不完全确定,但可能是保存默认值而错误位于其他地方。我正在考虑你的“openView”方法:

- (IBAction)openview{
NSString *var = [[NSUserDefaults standardUserDefaults] objectForKey:@"choose"];
if (var == @"choose1"){
    [self pushViewController:view1 animated:YES];}
/** you are comparing to "choose1" here as well. **/
else if (var == @"choose1"){
    [self pushViewController:view2 animated:YES];
}

另一种可能性是你永远不会调用你的choose1()或choose2()方法吗? 这可以解释为什么价值永远不会改变。

尽管从这两个可能性中我认为用于更改UserDefaults的代码中没有错误。

希望这有帮助。

此致

Gjallar

答案 2 :(得分:0)

啊,对不起:我是意大利人,所以我用“选择”这个词用意大利语翻译“scelta”。 在这里我用英语翻译,我写了“choose1”,但在我的代码中,我使用了“choose2”(或“scelta2”:P)

另一种可能性(我从未调用过函数choose1()或select2())...不,我当然打过电话了!