==<<管理者環境>>==
MacOSX ver.10.7.3
Xcode ver.4.2.1
iOSシミュレータ ver.5.0
==============
iPhoneアプリ開発でデータベースを使い始めた直後にハマったのが、「データベースが更新されない」ということでした。
原因
「実機やシミュレータのアプリケーションフォルダ内にあるデータベースファイルを削除していないから」
対処方法
- 方法1.アプリケーションフォルダ(※)内にあるデータベースファイルを削除する
※/Users/[自分のユーザ名]/Library/Application Support/iPhone Simulator/[iOSのバージョン]/Applications/[各アプリケーションのフォルダ(英数字の羅列)]/Documents/データベース.sqlite
- 方法2.シミュレータ上でアプリごと削除する
※アプリアイコンを長押し(長クリック)して[×]をクリック
※削除は自己責任で
※下記「問題の背景」も重要なのでお読みください
※実機の場合はアプリごと削除しないとダメちなみに、方法1に記載したパスで辿り着くApplicationsフォルダをFinderの「よく使う項目」に登録しておくと今後一発で開けるので便利です。

問題の背景
どういう事なのか。よくブログなどで「SQLiteの使い方」が紹介されていますが、そのよくある方法を使った時の流れで説明します。
※もちろんデータベースを扱うコードによっては流れが異なりますので悪しからず。
- シミュレータ環境でアプリを実行(Run)する
- アプリケーションファイル(ソースファイル、データベースファイル、画像ファイルなどが1つにまとめられたファイル)がシミュレータ環境の各アプリケーションのフォルダ内に作成される
- シミュレータ環境の各アプリケーションのフォルダ内にあるドキュメントフォルダ内に同じデータベースファイルがないかコード上で確認し、なければコピーする
- ドキュメントフォルダ内にあるデータベースファイルをアプリに利用する

問題なのは「3」の「なければコピーする」というところ。
1番最初にRunした時点では当然データベースファイルは存在しませんからコピーされます。ところが、2度目以降では、既にデータベースファイルが存在しているのでコピーされません。
つまり、いつも使っているプロジェクトフォルダ(私の場合は、/Users/ユーザ名/iPhoneApp)でデータベースファイルをいくら更新しようとも、シミュレータ内のデータベースファイルは更新されないのです。
アプリで利用されているデータベースファイルは、「いつも使っているプロジェクトフォルダ内」ではなく「
シミュレータ環境下のドキュメントフォルダ内」のものだということを覚えておいて下さい。これは、シミュレータだけでなく実機でも同じ(ハズ)です。
これは、データベースを使ったiPhoneアプリにおけるAppStoreでのアップデートの参考材料になると思います。
何度もCoreDataの習得を試みたのですが低能の私には理解出来ず、住み慣れたFMDB(SQLiteのラッパクラス)を使ってデータベースのアップデートに挑戦しています。
- 関連記事
-
- 2012/03/23(金)|
- Database
-
| トラックバック:0
-
| コメント:0