Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在UITableView中显示一个表中的中等大小数据集_Ios_Iphone_Objective C_Uitableview_Core Data - Fatal编程技术网

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

Ios 在UITableView中显示一个表中的中等大小数据集,ios,iphone,objective-c,uitableview,core-data,Ios,Iphone,Objective C,Uitableview,Core Data,对于我正在创建的应用程序,我正在寻找显示中等大小记录集(约130条记录,约13列)的正确方法。数据现在位于sqlite数据库中,我想用它在UITableView中显示。有了这么多的记录和列,我觉得数组的内存太大了 环顾四周(以及之前的经验),我认为我最好选择核心数据并使用NSFetchedResultsController,但我不确定这一点。不需要更改或添加数据。所以使用这个可能是过分了 如果是这样的话,我很想知道使用什么组件,因为我真的找不到这类问题的答案。 如果不是这样,请为我指出正确的方向

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

环顾四周(以及之前的经验),我认为我最好选择核心数据并使用
NSFetchedResultsController
,但我不确定这一点。不需要更改或添加数据。所以使用这个可能是过分了

如果是这样的话,我很想知道使用什么组件,因为我真的找不到这类问题的答案。
如果不是这样,请为我指出正确的方向。

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

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

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

SELECT `recordid` FROM `yourtable`; 
在委托方法“tableView:cellForRowAtIndexPath:”中,现在可以从此记录加载所有rest数据:

SELECT * FROM `yourtable` WHERE `recordid` = [indexPath row];
如果数据库记录仍在增长,则可以通过分页查询获取数据:

SELECT * FROM `yourtable` LIMIT 10 OFFSET 0; 

有一个小技巧,您不需要从该表中选择所有数据并转换为一个数组,只需选择如下数据:

SELECT `recordid` FROM `yourtable`; 
在委托方法“tableView:cellForRowAtIndexPath:”中,现在可以从此记录加载所有rest数据:

SELECT * FROM `yourtable` WHERE `recordid` = [indexPath row];
如果数据库记录仍在增长,则可以通过分页查询获取数据:

SELECT * FROM `yourtable` LIMIT 10 OFFSET 0; 

答案取决于你需要什么。特别是,如果您必须在一天左右的时间内发布应用程序,那么重构核心数据将是一个障碍。它有一个非常陡峭的学习曲线,所以它不能在一天内消化。相反,如果您有更多的时间可以使用,那么您可以使用核心数据并在将来重用这些专有技术

所以,这里有两个选择。继续使用纯SQL,或者只迁移到核心数据。如果您选择了第二个,那么您需要的主组件是
NSFetchedResultsController


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

答案取决于您需要什么。特别是,如果您必须在一天左右的时间内发布应用程序,那么重构核心数据将是一个障碍。它有一个非常陡峭的学习曲线,所以它不能在一天内消化。相反,如果您有更多的时间可以使用,那么您可以使用核心数据并在将来重用这些专有技术

所以,这里有两个选择。继续使用纯SQL,或者只迁移到核心数据。如果您选择了第二个,那么您需要的主组件是
NSFetchedResultsController


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

主要问题将不是如何组织内部数据结构,而是如何有效地向用户显示13列内容,同时考虑到iPhone上很少的屏幕空间。你想过吗

这里几乎没有选择

  • 您可以在主表视图中只显示一些简短的信息,对于每个单元格,都有包含其余信息的详细视图

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

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


主要问题不是如何组织内部数据结构,而是如何有效地组织