アプリ作り出して結構初期段階でなやんだのは、plistというインデックスファイルみたいなもんの使い方でした。
手持ちの開発本にはのっていなかったし、サンプルコードをみてもひとつに繋がるまでに時間かかりました。
今はつかえるけれど、それをコードで説明してとか、ひとつひとつの意味とか、追求されちゃうと痛いです。
でもまあ、自分なりに噛み砕いたメモを書いてみたくなったので、ひとつ書いてみましょう。
*ファイルを組み込む*
plistみたいなデータだとコードから最初っからつくっちゃえばいいような気もするんですけど、私のやりかただと空ファイルとかひな形を Resources っていうフォルダに置いて、プロジェクト内の同名グループにドラッグで放り込んでいます。画像とか音とかもです。で、これは実行したときに [NSBundle mainBundle] っていう場所指定で読むことができます。
失敗談 … ローカライズした説明書の画像ファイルをそれぞれの言語の .lproj フォルダ内に置いてしまい、 [NSBundle mainBundle] でテストでは開けても、リリース時に開けない症状になりました。Bundleで使うデータをうまく組み込めているかどうかは Build Phases の Copy Bundle Resouces で見られます。そういうことがあってからは、サブミット前に毎回 Copy Bundle Resouces を確認するようになりました。赤字になっていたらアウト!です。
*ファイルを呼び出す*
これは [NSBundle mainBundle]にあるものを呼び出します。但し!データ系は初回限定です。毎回ここから読んじゃうと毎回空データだったり編集前のものを読んじゃいます。最初に読んだデータはアプリ内のディレクトリに保存してやります。Documents とか Library とか。Bundle にデータが上書き保存できるのかどうかは知らないけど、保存したとこで実機転送時やユーザーならアップデート時にまた空ファイルに戻っちゃうのは意味ないですからね〜。
自分なりな使い方
Resouces(Bundle)… リードオンリーなところ。画像とかインストール時に更新かかってもいいデータ、初期読込み的なデータを置く。
Documents … ユーザー編集のデータ系を置くところ。設定次第でiTunesのファイル共有からPCにデータを抜いたり、逆もできます。
Library … 設定データ系をおくところ。ファイル共有から見えません。
*ファイルを書く*
書くのは上のようなDocuments とか Library とかのディレクトリに対してです。他にもあった気がするし、さらに階層を掘れた気もします。調べてみてください。書いたデータは実機上じゃ生データを見られないので、シュミレータ実行でテストがオススメです。シュミレータ上データはこんなパスの中の奥の方にいると思います。
/Users/ユーザー名/Library/Application Support/iPhone Simulator/
実際、実行時にファイルの中身が変わるのは見ていて楽しいです。
*もっかい読んだり書いたり*
一回読み書きできても何かと失敗したりすることってありますよね…。そんなときのチェック。
●初回読込み後にファイルを保存した場所からよみこんでいるか
●書き込む前に直接ファイルのある場所から読み直しているか
いっこめはBundleデータを読まないでくれというチェックです。
にこめは、個人的解釈。とくにいろんなタイミングで読み書きするデータはself.〜なんて入れ物を確保していても実データとは異なっているかも、と思う訳です。他の言語をやってたとき、必ずファイルの読み書きはロックしたり一回読込んで行っていたし、実際、先日にそれを忘れた一箇所がバグとなったので、私の中では必須なんです。
なんだか曖昧なメモですが、自分なりな咀嚼(そしゃく)模様の披露でした。
たくさん参考書もサンプルコードもあって素晴らしい時代、宝の山なんですが、やっぱり難しいコードや言葉はすっと頭に入りにくいですよね。
いろいろ試してイメージを捉えるのが大切だし、もっともっと勉強しなきゃと思います。
いきなり山頂を目指さずに、ゆっくり挫折もしながら上っていきたいと思います。
ではごきげんよう。さようなら〜。