[Titanium Mobile] ファイル読み込みでTi.Filesystem.getFileがundefinedになるときの簡単な解決方法

Titanium MobileでiPhoneアプリ開発をちょっとずつ勉強中の@kasumiiです。こんにちは。

Titanium Studioを使って開発しているのですが、ファイルの読み込みをしようとするとエラーが出て困ったなーと。

Google先生に聞いてみたところ、簡単な方法で解決したのでその方法をメモメモ。

test.txt を読み込みたくて以下のようなコードを書いてiOSシミュレータで実行しようとすると、

var file = Ti.Filesystem.getFile(Ti.Filesystem.resourcesDirectory, 'test.txt');

undefined だよ!と怒られます。

'undefined' is not an object (evaluating 'Ti.Filesystem.getFile') 

いろいろぐぐってみたら、それっぽい解決方法を見つけました。

Titanium Studioのメニューバー「Project」→「Clean」で、クリーンしたいプロジェクトを選択すればOK。

クリーンしてからビルドしなおすと……エラーが出なくなった!

というわけで、何か謎現象が起きたらまずはプロジェクトをクリーンしてリビルドしてみるのが良いようです。(あとで知りましたがTitanium界隈では常識っぽい?w)

モジュールを追加して実行したときに「Couldn’t find module」と怒られたときも、クリーンしてビルド。これも覚えておこう。

【参考】Couldn’t find moduleへの対処 | ひげろぐ

最初、Ti.Filesystem.resourcesDirectoryが怪しいと思って調べていたら、以下の記事を見つけていろいろ勉強になりました。

Ti.Filesystem.resourcesDirectory に保存したファイルは、iOS シミュレータだと app.js と同階層に生成され正常に動作するが、iOS 5 実機だと /AppName.app のアプリケーションバンドルを指し変更不可な領域らしい。

また、iCloud 対応のため、ユーザが生成したデータは /Documents に保存し、iCloud に自動バックアップさせた方が良いらしい。

【参考】[ Titanium Mobile ] 入力した文字列をファイルに書き込み、次回のアプリ起動時に復元させるサンプルコード | Bowz::Notebook