从 SQLite 数据库加载 UITableView 中的可见单元格

Load visible cells in UITableView from SQLite database

我想在 UITableView 中显示数据库中的数百条记录。虽然我可以使用 CoreData,但我决定尝试使用 SQLite 数据库,因为我目前正在参加一个关于数据库的讲座。虽然我可以将所有数据加载到一个数组中,但我想尽量减少内存使用量,以便我可以对另一个具有更多数据的应用程序使用相同的代码。所以我的问题是,如何从数据库中加载当前显示在 table 视图中的行?我要显示的 table 有几个属性,主键是一个字符串 - table 应该按这个字符串排序。那么我如何找出显示了哪些单元格(索引),然后我应该使用 select * from mytable limit x,y 来获取我想要显示的行,或者我能否以任何方式提高性能(使用 SQLite 或使用一些很棒的代码) .

提前感谢您的帮助!

顺便说一句:如果这没有任何区别,我正在使用 FMDB。

从某种意义上说,您的尝试是荒谬的。 NSFetchedResultsController 是 Core Data 的一部分,为您在 table 视图中显示 100 行或 1000 行的所有优化。

但您似乎是在将此作为一项学术练习,这里有一些提示:

  • 显然,在 sql 语句中使用限制是正确的方法。
  • 你可以在内存中的数组中固定你想要的记录数为一个固定的数字,例如50. 这将取决于适合屏幕的最大单元格数,乘以 5 左右(对于真正快速的滚动)。
  • 您仍然可以在 numberOfRowsInSection 中告诉 table 视图总记录数。它只会请求它需要显示的记录。
  • 一行记录在所有记录的理论数组中的索引将表示为indexPath.row
  • 您跟踪当前偏移量,表示 table 视图中顶行的总列表中的索引。
  • 您可以编写一个函数来获取某个索引的记录并检查它是否需要重新获取。
  • 如果您需要检查屏幕上的内容,您可以使用 indexPathsForVisibleRows 获取 table 视图的所有可见单元格。
  • 为了使滚动平滑,您需要覆盖 scrollViewDidScroll 并对 contentOffset 进行适当的计算,并即时设置 table 的 contentOffset 以反映table 的正确部分。