在UITableView中显示一个表中的中等大小的数据集

时间:2013-12-27 15:40:20

标签: ios iphone objective-c uitableview core-data

对于我正在创建的应用程序,我正在寻找显示中等大小记录集的正确方法(大约130条记录,大约13列)。数据现在位于sqlite数据库中,我想用它来显示UITableView。有了这么多的记录和列,我认为数组太过密集了吗?

从环顾四周(和之前的经历)我认为我最好选择核心数据并使用NSFetchedResultsController,但我不确定这一点。无需更改或添加数据。所以使用它可能有点矫枉过正?

如果这是可行的方法,我很想知道使用哪些组件,因为我无法真正找到这类问题的答案。 如果这不是可行的方法,请指出我应该走的正确方向。

4 个答案:

答案 0 :(得分:2)

核心数据是一个很好的匹配。它也可以与sqlite一起用作数据存储区,但是您可能需要重新导入数据。 NSFetchedResultsController使核心数据集合可以很容易地用作表视图的数据源。 XCode中的建模工具使得创建数据结构和从中创建NSManagedObject子类也非常方便。我还会考虑到您可能希望将来扩展您的数据集或结构,并且核心数据具有经过战斗测试的设施以帮助您完成这些任务。

答案 1 :(得分:1)

有一个小技巧,你不需要从这个表中选择所有数据并转换成数组,只需选择这样的数据:

SELECT `recordid` FROM `yourtable`; 

在委托方法“tableView:cellForRowAtIndexPath:”中,您现在可以从此记录加载所有其余数据:

SELECT * FROM `yourtable` WHERE `recordid` = [indexPath row];

如果您的数据库记录仍在增长,您可以通过分页查询来获取数据:

SELECT * FROM `yourtable` LIMIT 10 OFFSET 0; 

答案 2 :(得分:1)

答案取决于您的需求。特别是,如果你必须在一天左右的时间内发布应用程序,那么重构Core Data将是一个障碍。它的学习曲线非常陡峭,因此无法在一天内消化。相反,如果您有更多的时间花在上面,那么请使用Core Data并在将来重复使用专有技术。

所以,请坚持两个选项。继续使用纯SQL或只迁移到Core Data。好吧,如果您选择了第二个,那么您需要的主要组件是NSFetchedResultsController

此课程与UITableView结合使用,提供了许多功能。其中最重要的是保持较小的内存占用。实际上,如果使用批量大小,则可以利用延迟加载机制。比如说,你想要一批20件物品。 NSFetchedResultsController将加载前20个项目,如果向下滚动,它将加载其他20项,依此类推。

答案 3 :(得分:1)

主要问题不是如何组织内部数据结构,而是如何有效地向用户呈现13列,同时考虑到iPhone上的屏幕空间非常小。你有没有想过这个?

这里的选项很少

  • 您可以在主表视图中显示某种简要信息,并且每个单元格都包含详细信息视图以及其他信息

  • 你可以在每个单元格内动态生成一堆标签,并用你的数据填充它们,但现在你真的面临空间限制,因为你可能不会在一行中放入那么多的数据。您还需要在表格视图中创建自定义标题(如果需要显示标题)

  • 或者你可以发明别的东西。当我不得不处理非常类似的问题时,我去实现类似于Excel“冻结列”功能的东西 - 其中标题列是固定的并且始终保留在屏幕上,并且所有数据列可以水平滚动并且基本上位于标题下方。查看随附的屏幕截图(注意带有统计数据的列周围的滚动条):

enter image description here