3

アプリのロード時に使用するために格納するために、整数値を NSUserDefault オブジェクトに渡しています。その整数値を浮動小数点数に切り替えようとするまで、完全に機能していました。それはたくさんの問題を引き起こしたので、私は自分のアプローチを再調整し、command-z で整数の安全性に戻った...またはそう思った。

以前は、値を保存するとすぐにシミュレーターを閉じることができ、コンソールは正しく保存された数値を問題なく吐き出していました。今、そのばかげたフロートの混乱の後 (NSUserDefault オブジェクトを破損した可能性がありますか? それはばかげているように聞こえます...)、表示する正しい数値を取得することは、ややギャンブルです。

一連の NSLog を調べたところ、保存を押したときに保存した値が UserDefault クラスの set メソッドに正しく渡されていることが確認できました。set メソッドは値を正しく取得し、次のように NSUD オブジェクトに設定します。

[self setObject:[NSNumber numberWithInteger:num] forKey:savedNum];

そのオブジェクトに対して get メソッドを実行すると、コンソールに値が正しく出力されます。アプリが読み込まれると、先ほどテストした同じ get メソッドが呼び出されますが、常に正しい結果が返されるとは限りません。多くの場合、表示されるのは前回の保存の値です。

保存ボタンを押して 5 秒待ってからアプリを閉じると、以前は正常に機能していましたが、まれです。10 秒待つと、正しい数字が吐き出されます。

なぜこの操作に時間が関係するのでしょうか? 特に昨日正しく動作していたので、なぜこれが起こっているのか完全に途方に暮れています...

任意の考えや入力をいただければ幸いです!!

4

3 に答える 3

9

-synchronizeNSUserDefaultsを確認しましたか?

于 2010-11-19T23:13:22.467 に答える
1

私はその動作に気づいたことはありません - そして遅延が関係しているとは思いません。

したがって、最も明白な質問は次のとおりです。

あなたがする場合:

[[NSUserDefaults standardUserDefaults] setInteger:value ForKey:@"myInteger"];
NSLog(@"It is %d",[[NSUserDefaults standardUserDefaults] integerForKey:@"myInteger"]);

正しい値を取得していますか?

于 2010-11-19T23:17:35.940 に答える
0

これはシミュレーターのバグだと思います。シミュレートされたデバイス上のアプリケーションで、Settings.app を開きます。ここで、Settings.app を終了します。デフォルト設定が突然機能し始めます。

非粘着性のNSUserDefaults問題については、Apple ディスカッション フォーラムのこのスレッドも参照してください。

于 2010-11-19T23:21:49.600 に答える