2013-05-20 3 views
8

ときにユーザがログインするためにオブジェクトを削除しませんが、私のような、私のJSONサーバからトークンをダウンロードし、NSUserDefaultsに格納します。NSUserDefaultsは、私のアプリケーションへの重要

[[NSUserDefaults standardUserDefaults] setValue:token forKey:TOKEN]; 

ユーザがログアウトすると以降のページでは、私は、このメソッドを呼び出すと、ログイン画面に戻り:

[[NSUserDefaults standardUserDefaults] setObject:@"" forKey:TOKEN]; 

(とその前に、私は[[NSUserDefaults standardUserDefaults] removeObjectForKey:TOKEN]と呼ばれる;)

それDOE私はこのユーザーのデフォルトを削除しようとすると、私はいつも私に完全なトークンを表示し、空の文字列もヌル値も表示しません。

周囲を読んでいるときは、明らかに読み取り書き込みサイクルと関係がありますか?しかし、私がしばらくそれを残しても、鍵はまだ残っています。これはシミュレータの問題ですか?

原因が何であれ、どうすればこの問題を回避できますか?

+0

あなたはアプリの読み込み方法について詳しく説明できますか?私はremoveObjectForKeyの前と後に値を記録しようとしましたが、それはうまくいきます: '' [NSUserDefaults standardUserDefaults] setValue:@ "test" forKey:@ "token"]; NSLog(@ "%@"、[[NSUserDefaults standardUserDefaults] objectForKey:@ "token"]); [[NSUserDefaults standardUserDefaults] removeObjectForKey:@ "token"]; NSLog(@ "%@"、[[NSUserDefaults standardUserDefaults] objectForKey:@ "token"]); ' –

+1

このようにログを記録すると、直前と直後に、既存から削除されます。しかし、私は私のアプリケーションを終了し、それをリロードした後、私はそのデータにアクセスすると、文字列が再び表示されます! (そしてしばらくしてからそれを削除してもう一度それを保存しません) – Rambatino

+0

それはビューコントローラにのみロードされるので、問題がどこにあるのかは分かりません。 – Rambatino

答えて

16

これはメモリを最初にキャッシュするシミュレータの問題です。それはxcodeでのみ起こり、デバイス上で起こるべきではありません。キーが削除された後

+0

私の場合はシミュレータが問題を引き起こしていました。 – Tander

+0

as in my ..... – Rambatino

+6

あなたが実際に単体テストを書くまで、それらはデバイス上で実行することができません。テストが実際に成功するのはどうしたらよいでしょうか? – Mazyod

7

あなたは

[[NSUserDefaults standardUserDefaults] synchronize]; 

を呼ぶのですか?おそらくあなたはデータベースに変更を永続化していないでしょう。

+0

これはもう問題ではありませんが、それが方法でした。私は本当により頻繁にドキュメントを読む必要があります。ありがとう、私は将来それを使用します。私はあなたに正解を作った – Rambatino

関連する問題