【iOS】NSUserDefaultsが保存されない??

公開: 2013-12-12 18:43
更新: 2016-04-29 06:03
最近、ちゃっかりお顔がふっくらしてきたあっきぃです。
アイアムアヒーローの12巻を読みましたが相変わらずおもしろいです。

さてさて、
ガリガリと開発中にちょっとした値なんかをNSUserDefaultsで保存したりしますが、

たまに「あれ?保存出来てない...」なんて事象に遭遇するようです。

原因としては

NSUserDefaultsはiOSのお手透きの際に保存するよ!!

という仕様によるもの。

iOSさんの動きとしては

①setObjectを命令される
②メモリに一時的に保存
③暇なときにディスクに保存するわー

とのこと。

set直後にgetするとメモリから値を引っ張ってこれるので「よし、まんまと保存されたな。」とあなたは勘違いし、直後Xcodeから再起動ファイヤー!してしまうとディスクに保存されず「お?お?お?」となるわけです。


さて解決方法ですが、次のようにsynchronizeをsetObject後に呼んであげればOKです。

NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
[ud setObject:obj forKey:@"key"];
[ud synchronize];
おもーーいデータを保存するのであれば若干画面が止まるはずですが、
普通はパフォーマンスに違和感なく済むかと思います。

「ディスクに保存されるまえにクラッシュしてもうた、やばい、あの値が保存されてないカモ!!」

って言いたくなるような、やばい値を保存する場合は毎回呼んであげましょう。


「保存されなくても別にいいや」

って場合はiOSさんに任せましょう。

ではでは♪

この記事をシェア
この記事にコメントする
書き込む
あっきぃ(@appstars_aki)
Web、iOSなフリーランサーです。好きなものはお寿司です。でもお寿司は高いので普段は雑草とか拾ったドングリを食べています。お仕事や意味もなく毎月お小遣いをくれる人を探してます。

お仕事の依頼や自分で作ったアプリのレビューを希望しちゃう方はaki@appstars.jpまでご連絡ください。