読者です 読者をやめる 読者になる 読者になる

(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

iOS8ではNSUserDefaultsの登録件数に限界が?【iOS】


このエントリーをはてなブックマークに追加

Plist飛ぶ

とあるアプリのレビューに「iOS8に対応お願いします!」みたいな事が書いてあって、特に不具合無かったのになーと思ってよくよく調べてみるとデータの保存が出来ていませんでした。

データは全部NSUserDefaultsに突っ込んでたので、plistを確認してみると…

f:id:kan_kikuchi:20141109171252p:plain

見事に真っ白!

どうやらNSUserDefaultsに詰め込み過ぎてデータが飛んだっぽいです。iOS7までは大丈夫だったのに…
と言っても数千〜万単位の登録件数があったので、ちゃんとした使い方をすればまずならない現象なんですがねw


NSUserDefaultsで保存するPlistのファイル名

結構規模の大きいアプリなので、今からデータの管理方法変えるのはメンドクサイ、なんとかNSUserDefaultsを使ったままで行きたい。と考えていたらどうやらNSUserDefaultsで保存するplist名は変更できる様子。

//設定しているidentifierの名前でplistが出来る
 NSUserDefaults* standardDef = [NSUserDefaults standardUserDefaults];
//hoge.plistが出来る
 NSUserDefaults* keyDef = [[NSUserDefaults alloc] initWithSuiteName:@"hoge"];


ということで複数のplistを作って分散して保存すれば行けそう…!


NSUserDefaultsで保存するPlistのファイル名

それで実際やったのが以下のコード



保存する際のkeyを使って"そのkeyの長さ" + "末尾一文字".plistを使うように。
(keyの長さだけじゃ分散し切れなかった)

苦肉の策ではありますが、なんとかデータは消えなくなったのでとりあえず良いか…
良くはない!!