iPhone& SQLite - 丢失数据库连接?

时间:2011-08-10 06:23:42

标签: iphone sqlite database-connection

我的应用程序中有一段奇怪的错误,也许你们可以帮助我。

这是给定的:

  1. 应用程序下载(很多)图像并将它们存储在Library / Caches目录中。

  2. 对于下载的每个图像,url和文件名都存储在SQLite数据库中。正如你所看到的,我重新发明了轮子并创建了我自己的“缓存”系统。我这样做是为了在必须下载大量图像时帮助减少应用程序的内存占用。

  3. 我有一个UITableViewController,在其单元格中显示一些文本数据以及(部分)下载的图像。每次调用以下内容时,都会从数据库中查询文件名:

    - (UITableViewCell*) tableView: (UITableView*) tableView
             cellForRowAtIndexPath: (NSIndexPath*) indexPath
    
  4. 查询的格式为:

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

    问题出现了:

    在tableView上快速向上或向下滚动,从而导致很多查询在很短的时间内执行,应用程序“中断”并且查询返回空行,除非重新启动,否则永远不会再次正常运行它。我猜测数据库连接会以某种方式丢失,但我无法确定。

    任何人都知道发生了什么和/或如何修复它?

    修改

    好的伙计们,我刚刚发现了这个错误的原因。当它被复制时,我发现数据库已经被破坏了。

    感谢您的评论,并且抱歉浪费您的时间。 v ^ _ ^'

2 个答案:

答案 0 :(得分:0)

您可以将数据库中的项加载到数据源中,也可以是数组数组。每个子阵列将具有特定行的信息。每当下载新文件时,只需更新文件路径。然后,您可以将图像存储到磁盘并从文件路径中读取。如果数据为NULL,您可以显示活动指示器,直到它被下载。

在下载方法中,您可以传递一个值,该值指示图像应该适合哪一行。下载完成后,您可以更新文件路径。这样做可以减少/消除将图像缓存在数据库中的需要。

答案 1 :(得分:0)

您是否检查过 sqlite3_prepare_v2 的返回代码?您也可以缓存预准备语句,使其在人口数据库上的速度非常快。每次请求此信息时,您是否打开了数据库连接?

如果没有使用数据库的代码,很难说出为什么会得到这样的图片。

您可以使用“ lazy ”方法来表示数据。例如,在 UIScrollViewDelegate * scrollViewDidEndDragging:willDecelerate: *和 scrollViewDidEndScrollingAnimation:方法从数据库调用数据并用数据填充行(或与一些最小的数据)