私はちょうど私の**NSUserDefaults**
に存在するキーがnilを頻繁に返すことに気づいた。 の半分くらいに見えますが、残りの半分はそうではありません。私は半分の時間を言うが、私は そのフリップフロップ、その40~50%私はそれが動作しない参照してください意味しない。 初期値を書き込むとすぐに同期が呼び出されます。 私は新しいユーザーがサインアップするときにアプリケーション リビジョンとしてこのキーを使用します。NSUserDefaults objectForKey時折nil
次のコードは、nilを返します。
#define kDBrevision @"revision"
NSString *rev = [[NSUserDefaults standardUserDefaults] objectForKey:kDBrevision];
私はアプリを起動し、ちょうど( はどんなNSUserDefaultsを記述することなく)値を監視する場合、値は時々、すべてのNSUserDefaultsへの変更なしで有効 です。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSString *r = [[NSUserDefaults standardUserDefaults] objectForKey:kDBrevision];
NSLog(@"revision %@", r);
_exit(1);
なぜこのようなことが起こっているのかわかりません。私の デバイスがiOS 10をXcode 8.2.1に接続しています。誰でもアイデアはありますか? おかげ
編集:私はこれを修正についてアップルに話し始め、あなたが ファイル保護を完全にオンになっている場合、それは時々現れて、この問題 の原因となることを見出し 、しかしAppleは語りました私の特定の ケース(これは私が今確信していた唯一のものです)はバグです。 Xcodeを使ってデバイス上でアプリを起動すると、 はこのように失敗しないことがあります。いつかわからない場合は を修正してください。その代わりに、重要な文字列を既定値から キーチェーンに移動しました。
おそらくあなたがあなたの 'NSUserDefault'にnilの値を保存する場合は、コード内で間違った半分の時間で正しい半分の時間のようなものは、その唯一のあなたのコードに、ありませんチェックする必要があります – Tj3n
設定中に[[NSUserDefaults standardUserDefaults] synchronize]が見つかりませんでしたか? – KSR
私はnilを書いていないことを確認しました。そして、私が新しい価値を書くとき、私はsyncrhonizeを呼び出します。 – Tim