私が構築しているアプリの 1 つは、SQLite を使用して、サーバーからダウンロードしたデータを保存します。
アプリ自体はマルチスレッドを使用しているため、アプリが起動すると、アプリはバックグラウンドでデータをダウンロードし、同時にユーザーに UI を表示します。
この時点で、ユーザーはアプリの操作を開始し、テーブルの行をタップして詳細ページにドリルダウンできます。
テーブルの行をタップすると、多くの sqlite3_prepare_v2() 関数呼び出しのいずれかでアプリがクラッシュすることがあります。NSOperationQueue に対して複数の最大同時操作を許可すると、より頻繁に発生しました。ただし、同時操作の最大数を 1 に制限したため、このようなことはほとんどなくなりました。
アプリの起動時にデータベース接続を開き、アプリを終了する必要があるまで開いたままにしてから、接続を閉じます。
クラッシュするサンプル行は次のとおりです。
if(sqlite3_prepare_v2(objDatabase, [strGet cStringUsingEncoding:NSUTF8StringEncoding], -1, &stmtGet, NULL) == SQLITE_OK)
{
...
}
エラーはEXEC_BAD_ACCESSと言っています
アプリの実行 20 回に 1 回、または 30 回に 1 回のように、クラッシュします。つまり、私の SQL ステートメントは 99% の確率で機能します。
これまでにこれが起こった人はいますか?