Objective c Obj-C,UITableView用户界面改进以处理大量记录,或者点击下一步以获取更多行?

Objective c Obj-C,UITableView用户界面改进以处理大量记录,或者点击下一步以获取更多行?,objective-c,ios,cocoa-touch,uitableview,Objective C,Ios,Cocoa Touch,Uitableview,我在找一些技术指导,也许是教程 我不得不在表视图中容纳更多我所期望的行/单元格 我已经开发/发布了视图/屏幕,但是如果有很多记录,它的速度会很慢,直到这个即将发布的版本才出现这种情况 我想我需要在sqlite查询中使用limit/offset,但是我的表中有部分等 我还需要创建一个单元格/行,用户点击该单元格/行可以说,显示接下来的50条记录 这一定是一个相当普遍的问题,以前一定讨论过 我的问题是开发此功能所需的时间。我太投入项目了,无法转换为核心数据也许核心数据是一个有效的解决方案。如果使用与

我在找一些技术指导,也许是教程

我不得不在表视图中容纳更多我所期望的行/单元格

我已经开发/发布了视图/屏幕,但是如果有很多记录,它的速度会很慢,直到这个即将发布的版本才出现这种情况

我想我需要在sqlite查询中使用limit/offset,但是我的表中有部分等

我还需要创建一个单元格/行,用户点击该单元格/行可以说,显示接下来的50条记录

这一定是一个相当普遍的问题,以前一定讨论过


我的问题是开发此功能所需的时间。我太投入项目了,无法转换为核心数据

也许核心数据是一个有效的解决方案。如果使用与
UITableView
链接的
NSfetchedResultController
(及其
NSFetchRequest
),则会为您管理项目

但如果您不想使用核心数据,这里有一个简单的建议:

在模型中加载一组数据(比如前50项)。加载后,模型用于在表上显示数据。当用户到达表的末尾时,我会在该表视图的页脚部分显示一个“showmore”标签。然后,如果用户单击它,再次加载数据(其他50项),将它们缓存在模型中并重新加载表,依此类推

如果您有一个部分和多行,则可以应用此技巧

希望能有帮助

编辑

如果您不想使用核心数据,我将执行以下操作(一些指导原则)

使用限制SQL语句来限制结果的数量(例如20)

在.h中创建一个偏移变量,如:

NSUInteger offset;
还有一种方法,比如:

- (NSArray*)fecthMore;
然后在.m中,实现该方法,如下所示:

- (NSArray*)fecthMore
{
   // using the offset to retrieve the array of results (e.g resultArray)
   // the first time you grab the first 20 elements (0-19), the second time the next 20 (20-39)
   // and so on

   offeset += [resultArray count]; // next 20
   return resultArray;
}

随着返回的数组在eac时间更新模型。

核心数据可能是一个有效的解决方案。如果使用与
UITableView
链接的
NSfetchedResultController
(及其
NSFetchRequest
),则会为您管理项目

但如果您不想使用核心数据,这里有一个简单的建议:

在模型中加载一组数据(比如前50项)。加载后,模型用于在表上显示数据。当用户到达表的末尾时,我会在该表视图的页脚部分显示一个“showmore”标签。然后,如果用户单击它,再次加载数据(其他50项),将它们缓存在模型中并重新加载表,依此类推

如果您有一个部分和多行,则可以应用此技巧

希望能有帮助

编辑

如果您不想使用核心数据,我将执行以下操作(一些指导原则)

使用限制SQL语句来限制结果的数量(例如20)

在.h中创建一个偏移变量,如:

NSUInteger offset;
还有一种方法,比如:

- (NSArray*)fecthMore;
然后在.m中,实现该方法,如下所示:

- (NSArray*)fecthMore
{
   // using the offset to retrieve the array of results (e.g resultArray)
   // the first time you grab the first 20 elements (0-19), the second time the next 20 (20-39)
   // and so on

   offeset += [resultArray count]; // next 20
   return resultArray;
}

随着返回的数组每次更新模型。

Ray Wenderlich提供了有关使用NSFetchedResultsController的精彩教程:


这肯定会解决您在大型表上的性能问题。使用NSFetchedResultsController非常简单。更困难的部分是将您的应用程序从sqlite移动到核心数据,但幸运的是,他以前的教程可能也会有所帮助。

Ray Wenderlich有一个关于使用NSFetchedResultsController的精彩教程:


这肯定会解决您在大型表上的性能问题。使用NSFetchedResultsController非常简单。更困难的部分是将您的应用程序从sqlite移动到核心数据,但幸运的是,他以前的教程可能也会有所帮助。

您能告诉我更多关于核心数据方法的信息吗?我真的在寻找更多的细节solution@Jules你想知道什么?也许如果你给我一些细节,我可以帮你。我发现了这个,我只是想知道这是否是最好的非核心数据方法,目前我已经将所有数据加载到视图级数组中,我想我只需点击cellForRowAtIndexPath中的数组。我不确定是数据访问速度慢,还是添加的单元格数量慢,我想我可以发现……那么你说数据访问速度慢?另外,我想我可以添加数组,而不是从零开始重新填充。你能告诉我更多关于核心数据的方法吗?我真的在寻找更多的细节solution@Jules你想知道什么?也许如果你给我一些细节,我可以帮你。我发现了这个,我只是想知道这是否是最好的非核心数据方法,目前我已经将所有数据加载到视图级数组中,我想我只需点击cellForRowAtIndexPath中的数组。我不确定是数据访问速度慢,还是添加的单元格数量慢,我想我可以发现……那么你说数据访问速度慢?另外,我想我可以附加数组,而不是从零开始重新填充。