2011-08-10 18 views
1

私のアプリケーションにこの奇妙なバグがしばらくありました。おそらくあなたが私を助けることができます。画像(多くの)アプリケーションのダウンロードiPhoneとSQLite - データベース接続が失われましたか?

  1. をし、ライブラリ/キャッシュディレクトリに格納します:ここで

    が与えられています。

  2. ダウンロードしたすべての画像について、URLとファイル名はSQLiteデータベースに保存されます。ご覧のとおり、私はホイールを再発明し、自分の "キャッシング"システムを作成しました。私は多くの画像をダウンロードする必要があるときにアプリケーションのメモリ占有量を減らすためにこれを行っています。

  3. 私は、いくつかのテキストデータとダウンロードした画像の一部をセルに表示するUITableViewControllerを持っています。

    - (UITableViewCell*) tableView: (UITableView*) tableView 
         cellForRowAtIndexPath: (NSIndexPath*) indexPath 
    

クエリの形式は以下のとおりです:ここ

SELECT filename, imageTitle, etcetera 
FROM tbl_images 
WHERE url = 'http://www.foo.com/bar' 

は問題が来る:

までスクロールしたとき、またはファイル名は毎回、以下が呼び出されたデータベースから照会されテーブルビュー上で非常に速くダウンするため、短時間で多くのクエリが実行され、アプリケーションが「中断」してクエリが空の行を返し、再起動しない限り正しく動作しません。私はデータベースの接続が何とか失われていると推測していますが、実際にはわかりません。

誰がどのようなことが起こっているか、どのように修正するかについて考えていますか?

EDIT

OKみんな、私は、バグの原因を発見しました。再現すると、データベースが何らかの形で壊れていることがわかりました。

コメントありがとうございました。ご迷惑をおかけして申し訳ありません。 v^_^'

答えて

0

データベースから項目をデータソースに読み込むことができます。配列の配列でも構いません。各サブアレイは特定の行に関する情報を持ちます。新しいファイルがダウンロードされるたびに、ファイルパスを更新するだけです。イメージをディスクに保存し、ファイルパスから読み取ることができます。データがNULLの場合、ダウンロードされるまでアクティビティインジケータを表示できます。

ダウンロード方法では、画像がどの行に収まるかを示す値を渡すことができます。ダウンロードが完了すると、ファイルパスを更新できます。そうすることで、イメージをデータベースにキャッシュする必要性を減らしたり除去したりすることができます。

0

戻りコードを確認しましたsqlite3_prepare_v2?また、プリペアドステートメントをキャッシュして、データベースへの集計を非常に高速にすることもできます。この情報を要求するたびにデータベース接続をオープンしましたか?

データベースを操作するコードがないと、なぜそのような画像が得られるのかを伝えるのは難しいです。

"lazy"メソッドを使用してデータを表すことができます。例えばUIScrollViewDelegate * scrollViewDidEndDraggingで:willDecelerate: *とscrollViewDidEndScrollingAnimation:方法は、データベースからのデータを呼び出して、行W/Oデータを埋める(またはいくつかの最小のデータと共に)

+0

ここで返される値の確認であります(!sqlite3_prepare_v2(m_database、 クエリ、 -1、 &initStatement、 NULL)= SQLITE_OK) { の#ifdef DATAXML_DEBUG NS場合 ' :* sqlite3_prepare_v2 *により、ログ(@ "エラー:メッセージ%sのステートメントを準備できませんでした。"、 sqlite3_errmsg(m_database)); #endif [m_databaseLock unlock]; return nil; } ' –

+0

私が見ることができるように、あなたは要求をする度にステートメントをコンパイルします。それは本当に悪い考えです。それを一度だけコンパイルし、要求が完了したらsqlite3_resetとsqlite3_clear_bindingsを実行して、他の要求との連携を準備します。 –

関連する問題