2011-01-13 31 views
4

ここでNSUserDefaultsに何らかの問題があります。ここでNSUserDefaultsが正しく機能しない

は、私はそれを作成しています方法は次のとおりです。

NSString *theCity = @"Test City"; 
[[NSUserDefaults standardUserDefaults] setObject:theCity forKey:@"SavedCity"]; 

は、ここで私はそれを取得しようとしている方法は次のとおりです。

if ([[NSUserDefaults standardUserDefaults] objectForKey:@"SavedCity"]) 
    { 
     NSLog(@"Key exists! %@",[[NSUserDefaults standardUserDefaults] objectForKey:@"SavedCity"]); 
    } 
    else { 
     NSLog(@"No city saved!"); 
    } 

私が持っている問題は、 "用のキーがあってもということですSavedCity "(Simulatorディレクトリのprefファイルをチェックします)、" No city saved "と表示されます。私は何か間違っているのですか?

ありがとうございます!あなたが追加する必要がありますどのような

+0

これはバニラアプリケーションで発生しますか?同様に、これはアプリ以外の場所でも起こっていますか? –

+0

@Daveいいえ、これはこのアプリでこれまでに起こった唯一の時間です。 –

+0

アプリケーションアイコンのマウスを押したままxcodeの停止ボタンを押すのではなく、「quit」と入力してアプリケーションを終了します。これにより、ユーザーのデフォルトがデータベースに正しく保存されます。 –

答えて

10

2つのことを試すことができます。

1)文字列の設定後にユーザーのデフォルトを同期させてみてください。 [[NSUserDefaults standardUserDefaults] synchronize]

2)私は最近、同様の問題に遭遇した自分-stringForKey:

+0

ご協力ありがとうございます。これは問題ではありませんでしたが、代わりに私は最終的にnullである元の文字列にそれを追跡しました。再度、感謝します。 –

+14

NSUserDefaultsの問題を解決するために、呼び出しを同期させることを推奨しないでください。これはかなり遅く、すべてのスレッドがデフォルトシステムに触れるのをブロックし、特にiOS上ではほとんど役に立ちません。明示的な同期の主な用途は、他のデフォルトドメイン(グローバル設定、別のアプリの設定など)を扱うときです。 –

0

は次のとおりです。

if ([[NSUserDefaults standardUserDefaults] objectForKey:@"SavedCity"] != nil) 

あなたが何かを保存したかどうかを確認したいので。

+3

あまり明白ではありませんが、著者の現在のコードは同じことをしています。 –

7

使用して文字列を検索してみます。ここに私のためにそれを修正したものがあります。 iOS Application Programming Guideから

あなたが設定バンドルのプロパティリストに含めるに加えて、起動時にプログラム任意のデフォルト設定値を登録することをお勧めします。新しくインストールされたアプリケーションの場合、アプリケーションの設定バンドルのデフォルトの設定値は、設定アプリケーションが実行されるまで設定されません。つまり、設定を実行する前にユーザーがアプリケーションを実行すると、設定バンドルで指定されたデフォルト値は使用できなくなります。起動時にこのような値をプログラムで設定すると、アプリケーションに常に適切な値が設定されます。プログラムで既定値を登録するには、NSUserDefaultsクラスのregisterDefaults:メソッドを使用します。

関連する問題