2012-02-27 65 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

但隨後清晰度代碼不一切。 :-)