バックグラウンド
sqlite
大規模なデータベースに使用するiPhoneアプリがあります。全文検索を使用FTS3
しているため、iOS SDKに含まれているライブラリを使用する代わりに、「独自の」sqliteを使用する必要があります。統合されたsqlite.cファイルを使用FMDB
し、Obj-Cラッパーとして使用します。
問題
私のプロジェクトはコンパイルされますが、データベースが誤動作しているかどうかを検出するためにインストールした例外でクラッシュします(これについては後で詳しく説明します)。しかし、私のパートナーは、問題なく、楽しくコーディングしています-私とまったく同じコミットリビジョンで。それは奇妙なことです。
具体的には、アプリは最初の読み込み時に次のことを行います。
- データベースをユーザーのドキュメントディレクトリにコピーして、書き込み可能にします。(正常に動作しています)
- FMDBの
databaseWithPath:
後に。を使用してデータベースを開きますopen
。 goodConnection
この時点でFMDBを呼び出すとYES
、データベースが実際に開いて機能していることが返されます。- 呼び出し
SELECT * FROM sqlite_master WHERE type = 'table'
はレコードを返しません。(多くのテーブルがあるはずです)
私が試したこと
ここで、存在しないデータベースを「開く」ようにsqliteに要求すると、データベースが作成されます。これは、この動作がどのように見えるかです。そこで、ターミナルウィンドウを開き、シミュレーターでアプリのDocumentsディレクトリに移動し、次のように入力しました。
Makbook:Documents makdad$ sqlite3 myDB.db
これはsqlite3を実行し、もちろん、すべてが正常に見えます。私のデータはすべてそこにあります。
FMDBのopenメソッドを1行ずつステップ実行して、適切なデータベースを開いていることを確認しました。私は確かにそうです。
私が最初に試したのは、Xcode3.2.6へのダウングレードでした。同じ問題なので、コンパイル時にXcode 3/4の違いを除外したと思います(最初はそれを疑っていましたが)。
誰かが試してみるデバッグfu、または私の問題が何であるかについての知識を持っていますか?