Titanium MobileでiPhoneアプリ開発をちょっとずつ勉強中の@kasumiiです。こんにちは。
Titanium Studioを使って開発しているのですが、ファイルの読み込みをしようとするとエラーが出て困ったなーと。
Google先生に聞いてみたところ、簡単な方法で解決したのでその方法をメモメモ。
Ti.Filesystem.getFile が undefined になる
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)
モジュール追加時も Project を Clean!
モジュールを追加して実行したときに「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