1

バックグラウンド

sqlite大規模なデータベースに使用するiPhoneアプリがあります。全文検索を使用FTS3しているため、iOS SDKに含まれているライブラリを使用する代わりに、「独自の」sqliteを使用する必要があります。統合されたsqlite.cファイルを使用FMDBし、Obj-Cラッパーとして使用します。

問題

私のプロジェクトはコンパイルされますが、データベースが誤動作しているかどうかを検出するためにインストールした例外でクラッシュします(これについては後で詳しく説明します)。しかし、私のパートナーは、問題なく、楽しくコーディングしています-私とまったく同じコミットリビジョンで。それは奇妙なことです。

具体的には、アプリは最初の読み込み時に次のことを行います。

  1. データベースをユーザーのドキュメントディレクトリにコピーして、書き込み可能にします。(正常に動作しています)
  2. FMDBのdatabaseWithPath:後に。を使用してデータベースを開きますopen
  3. goodConnectionこの時点でFMDBを呼び出すとYES、データベースが実際に開いて機能していることが返されます。
  4. 呼び出し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、または私の問題が何であるかについての知識を持っていますか?

4

2 に答える 2

1

カスタム コンパイル済み SQLite3 でも同じ問題がありました。このブログでこの問題の解決策を見つけましたhttp://regularrateandrhythm.com/regular-rate-rhythm-blog/sqlite3-fts-in-IOS4.html

于 2011-06-20T16:19:30.167 に答える
0

問題はiOS4.3SDKシミュレーターにあります。私はiOSデバイス自体をテストすることを怠っていました、そしてそれは動作します。

古いバージョンのiOSをサポートするには、-weak_library/usr/lib/libSystem.B.dylibリンカーフラグを使用します。iOS Simulator 4.3でそのフラグを削除すると、sqlite3に関連するすべての奇妙な動作が停止します。

私のパートナーが問題を抱えていなかった理由は、彼らがXcode 3.2.5、つまり4.2を実行しているためです。Xcode 3にダウングレードした場合でも、4つがインストールされていたため、3つは4.3SDKも使用していました。

この質問は実際の問題からはほど遠いので、新しい問題について新しい質問を開きます:)

于 2011-06-01T02:40:43.710 に答える