NSUserDefaults の同期メソッドが失敗するのはいつ、なぜですか? 私の値が実際に書き込まれ、NSUserDefaults にコミットされていることを確認する最善の方法は何ですか?
3 に答える
メソッドは、関数のsynchronize
上位レベルの API ラッパーですCFPreferencesSynchronize
。ドキュメントにはそれについて何もありませんがsynchronize
、の結果を返すだけだと思いますCFPreferencesSynchronize
。この CoreFoundation 関数は、ホスト (管理者) とネットワーク ベースの設定を同期するために使用できるため、場合によっては失敗する可能性があります。
アプリがそのユーザー ドメイン設定 (現在のユーザーのライブラリ ディレクトリ内) を同期するだけの最も一般的なケースでは、通常、関数は失敗しません。の戻り値を無視しても安全だと思いますsynchronize
。しかし、それは私の意見です。
私の場合、NSUserDefaultsを誤って使用すると、失敗します。たとえば、独自のオブジェクトを定義し、それをNSUserDefaultsまたはNSDictionaryに配置すると、配置できますが、同期すると失敗します。NSUserDefaultsはすべての種類のオブジェクトをサポートしているわけではないためです。私が知っているように、NSString、NSNumber、NSDictionary....カスタムクラスを作成する方法をグーグルで検索してNSUserDefaultsに保存することができます。
場合によっては、私のアプリが特定のキーで nil 値を書き込もうとしていて、それが原因で同期が失敗していました。現在、保存前にその値が nil であることを確認しており、問題は修正されています。