簡體   English   中英

iPhone & SQLite - 丟失數據庫連接?

[英]iPhone & SQLite - Lost Database Connection?

我的應用程序中出現這個奇怪的錯誤已經有一段時間了,也許你們可以幫助我。

這是給定的:

  1. 該應用程序下載(大量)圖像並將它們存儲在 Library/Caches 目錄中。

  2. 對於下載的每個圖像,url 和文件名都存儲在 SQLite 數據庫中。 如您所見,我重新發明了輪子並創建了自己的“緩存”系統。 當應用程序必須下載大量圖像時,我這樣做是為了幫助減少應用程序的 memory 占用空間。

  3. 我有一個 UITableViewController,它在其單元格中顯示一些文本數據以及(一些)下載的圖像。 每次調用以下命令時都會從數據庫中查詢文件名:

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

查詢的形式為:

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

問題來了:

當在 tableView 上快速向上或向下滾動時,從而導致在短時間內執行大量查詢時,應用程序“中斷”並且查詢返回空行,並且除非您重新啟動它,否則永遠不會再次正常工作。 我猜數據庫連接不知何故丟失了,但我不能確定。

任何人都知道正在發生的事情和/或如何解決它?

編輯

好的,我剛剛找到了錯誤的原因。 當它被復制時,我發現數據庫已經以某種方式損壞了。

不過,感謝您的評論,很抱歉浪費您的時間。 v^_^'

那么您可以將數據庫中的項目加載到數據源中,可能是 arrays 的數組。 每個子數組將包含特定行的信息。 每當下載新文件時,只需更新文件路徑。 然后,您可以將圖像存儲到磁盤並從文件路徑中讀取。 如果數據是 NULL,您可以在下載之前顯示活動指示器。

在您的下載方法中,您可以傳遞一個值,該值指示圖像應該適合哪一行。 下載完成后,您可以更新文件路徑。 這樣做可以減少/消除在數據庫中緩存圖像的需要。

您是否檢查了sqlite3_prepare_v2的返回碼? 您也可以緩存准備好的語句,以使其在填充到數據庫時非常快。 您每次請求此信息時是否打開數據庫連接?

如果沒有使用數據庫的代碼,很難說出為什么會得到這樣的圖片。

您可以使用“惰性”方法來表示數據。 例如在UIScrollViewDelegate * scrollViewDidEndDragging:willDecelerate: * 和scrollViewDidEndScrollingAnimation:方法調用數據庫中的數據並填充沒有數據的行(或使用一些最小數據)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM