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

时间:2015-11-27 18:00:27

标签: ios sqlite uitableview core-data fmdb

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

提前感谢您的帮助!

BTW:如果这没有任何区别,我会使用FMDB。

1 个答案:

答案 0 :(得分:1)

在某种程度上,你要做的是荒谬的。 NSFetchedResultsController是Core Data的一部分,它为您完成所有优化,以便在表视图中显示100个行的100个。

但是看起来你正在做这个学术练习,这里有一些提示:

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