2010-05-18 131 views
1

我正试图在iPhone/iPad应用程序中保存一些信息。 问题是,它的工作原理,但如果我关闭了应用程序(与模拟器上的主页按钮或关闭与CMD + Q)信息会丢失!NSUserDefaults不保存

这是我的代码(如果你看,我用“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]; 
    } 

} 

我不明白为什么:(

+1

比较'NSString'由'[var isEqualToString:@“choose1”]'!完成! – bddckr 2010-05-18 22:28:49

回答

2

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

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

否则你是比较实际的对象,而不是它们的内容。

+0

如果你不使用isEqualToString,那么你正在比较指向对象的指针,而不是实际的对象。 – progrmr 2010-05-18 23:25:23

+0

YESSSSSSSSSSSSSSSSSSSSSSSS! :D 解决!!!! 谢谢男人!!!!真!!! – JAA 2010-05-18 23:42:03

+0

不客气,是的,编程是正确的,他的更正。 – 2010-05-19 00:20:16

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]; 
} 

另一个possibilty可能是你从来没有打电话给你选中1()或choose2()方法?这可以解释为什么值永远不会改变。

尽管存在这两种可能性,但我认为在用于更改UserDefaults的代码中没有错误。

希望这会有所帮助。

问候,

Gjallar

0

啊,我很抱歉:我是意大利,所以我用这个词“选”与意大利语的翻译“scelta”。 在这里我翻译成英文,我写了“choose1”,但在我的代码我使用“choose2”(或“scelta2”:P)

其他可能性(我从来没有调用函数choose1()或选择2())...不,我打电话过,当然!

+0

不要回答你自己的问题,以这种方式提供更多信息。改为编辑你的问题。 – 2010-05-18 23:16:42

+0

是的。谢谢!! :) – JAA 2010-05-18 23:42:58