2015-11-27 45 views
0

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

感谢您的帮助提前!

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

回答

1

你试图做的是,在某种程度上,是荒谬的。它是Core Data的一部分,为您完成所有优化,准确地用于在表视图中显示100行1000行。

但是,因为它似乎你正在做这个作为一个学术活动,这里有一些提示:

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

非常感谢您的详细解答,这当然会帮助我。我还剩下一个问题:如何做到这一点?计算一个我想计算'绝对值'的前面所有部分的行数似乎相当迟钝。 – borchero

+0

如果你想要部分,一定要用'NSFetchedResultsController'。 – Mundi

+0

好吧,至少这是一个诚实的答案,我一定会在我的应用程序的未来版本中这样做,所以谢谢@Mundi :) – borchero

相关问题