2012-02-27 67 views
0

我真的希望这不是多余的,但我真的不能在其他SO帖子中找到答案。NSUserDefaults失败,不检索数据

在我的应用程序委托中,我为TopScoreLevel1键设置了0的值。后来在我的应用程序,然后运行这个代码片段:

 NSLog(@"This is your new score: %@", newScoreString); 
     [[NSUserDefaults standardUserDefaults] setObject:@"xxx" forKey:@"TopScoreLevel1"]; 
     BOOL fail = [[NSUserDefaults standardUserDefaults] synchronize]; 

     if (!fail){ 
      NSLog(@"success."); 
     } else { 
      NSLog(@"fail."); 
     } 

     NSString *printRecorded = [[NSUserDefaults standardUserDefaults] stringForKey:@"TopScoreLeve1"]; 
     NSLog(@"Class: User Score. DID USER DEFAULTS SAVE? --> %@", printRecorded); 

新的成绩成功打印的值,但我的同步方法失败。我还得到的(null)值。离奇。有任何想法吗?

+1

这个硬编码的字符串键可能是调试时难以解决的问题 – 2012-02-27 18:43:20

回答

3

当您设置该值时,您正在使用密钥@"TopScoreLevel1"。当你得到它时,你正在使用@"TopScoreLeve1" -note在1之前没有L.更改其中一个匹配另一个,你应该看到正确的行为。

+0

太棒了!这解决了打印问题,但不幸的是不是'失败'结果的问题,我得到:( – 2012-02-27 18:44:08

+0

好吧,我仍然失败,但结果是正确的,所以我想我会忽略这一点。 – 2012-02-27 18:49:24

1

您正在保存对象NSUserDefaults之后,您正在检索所以首先使用setString:forKey,然后尝试它解决你的问题?

而且您还正在检索@"TopScoreLeve1"的值,您正在保存@"TopScoreLevel1"的值时正确。

+1

是的,修复错字帮助:)。但是NSUserDefaults没有'stringForKey'方法。 – 2012-02-27 18:46:30

+0

okeys抱歉'stringForKey:'方法存在,但'setString:forKey'不存在。 – hchouhan02 2012-02-27 18:50:46

1

从文档:

- (BOOL)synchronize 

返回值

是如果数据被成功地保存到磁盘,否则NO。

尝试:

BOOL status = [[NSUserDefaults standardUserDefaults] synchronize]; 

if (status == YES){ 
    NSLog(@"success."); 
} else { 
    NSLog(@"fail."); 
} 

负逻辑是困难和双重否定真的很辛苦,所以
!fail
了很多更难理解比
status = YES

但随后清晰度代码不一切。 :-)