2012-02-27 30 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); 

新しいスコアが正常値を出力しますが、私のsynchronizeメソッドは失敗します。 printRecordedの値は(null)です。奇妙な。何か案は?

+1

このハードコーディングされた文字列キーは、デバッグ中にクラックするハードナットになる可能性があります –

答えて

3

値を設定するときは、キー@"TopScoreLevel1"を使用しています。あなたがそれを得るとき、あなたは@"TopScoreLeve1"を使用しています - 1の前に注釈はありません。それらのうちの1つを他と一致するように変更してください。

+0

素晴らしい!それは印刷の問題を解決しましたが、残念ながら私が得ている「失敗」の結果の問題ではありません:( –

+0

私はまだ失敗していますが、結果は正しいので、無視してみてください。 –

1

NSUserDefaultsにオブジェクトを保存した後、を取得していますので、最初にsetString:forKeyを使用して問題を解決してください。

また、@"TopScoreLevel1"に値を保存している値@"TopScoreLeve1"も取得しています。ドキュメントから

+1

はい、タイプミスを修正すると:)。しかし、NSUserDefaultsのための 'stringForKey'メソッドはありません。 –

+0

okeys申し訳ありませんが、 'stringForKey:'メソッドはありますが、 'setString:forKey'はありません。 – hchouhan02

1

- (BOOL)synchronize 

戻り値

YESデータは、ディスクに正常に保存された場合はそれ以外の場合はNO。

試してみてください。

BOOL status = [[NSUserDefaults standardUserDefaults] synchronize]; 

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

負論理が
status = YES

より理解することは本当に難しい、これ
!fail
それは多くの困難困難と二重否定である。しかし、その後のコードでは明快ではありませんすべて。 :-)

関連する問題