Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.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_Objective C_Uitableview_Lazy Loading - Fatal编程技术网

Ios UITableView通过删除现有记录以分页方式加载记录

Ios UITableView通过删除现有记录以分页方式加载记录,ios,objective-c,uitableview,lazy-loading,Ios,Objective C,Uitableview,Lazy Loading,实际上我想在UITableView中显示记录,记录总数可能超过100000。因此,每当用户滚动到70%的记录时(第70行),我都会以100条记录的块加载这些记录 我不想在内存中保留现有的记录块,所以最初我加载2块100条记录,当用户滚动到第170行时,我删除前100条记录并加载1块100条记录 但我的问题是如何重置indepath的值?目前它的值是170,但在加载100条记录的新块并删除前100条记录之后,我希望它的值是70 通过使用以下代码行,我找到了解决上述问题的方法 [tableView

实际上我想在
UITableView
中显示记录,记录总数可能超过100000。因此,每当用户滚动到70%的记录时(第70行),我都会以100条记录的块加载这些记录

我不想在内存中保留现有的记录块,所以最初我加载2块100条记录,当用户滚动到第170行时,我删除前100条记录并加载1块100条记录

但我的问题是如何重置
indepath
的值?目前它的值是170,但在加载100条记录的新块并删除前100条记录之后,我希望它的值是70

通过使用以下代码行,我找到了解决上述问题的方法

[tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:70 inSection:indexPath.section] atScrollPosition:UITableViewScrollPositionBottom  animated:NO];
但上面的代码行突然停止滚动。因此,滚动似乎突然在第70行停止


是否有其他解决方案来实现上述问题,请提前感谢。

为什么不允许用户以其他方式访问数据,例如:

  • 搜索功能
  • 数据的子分类
  • 也许值得一提的是,由于数据量如此之大,您的用户是否真的会向下滚动那么远?如果必须,是否会对用户体验产生负面影响

    为了参数起见,如果您想保护内存使用,您必须根据偏移量动态添加和删除单元格。标准的UITableview方法在这方面做得相当好

    在任何情况下,您在任何时候分配的单元格数量都应考虑您在单元格中输入的内容,例如图像与文本。如果是映像,那么100k将导致一个庞大的应用程序包(除非您根据需要从服务器中提取它们)。如果是文本,就使用苹果自己的UITableView方法,因为它们会更有效

    但是,如果您坚持这种方法,并且希望推出自己的自定义修复程序,则可以在UIScrollView中布局UIView负载,并使用UIScrollView的contentOffset来了解何时添加和删除单元格。单元格的实际添加应在屏幕外完成

    A.在scrollViewDidScroll中,观察与单元格高度对齐的特定偏移,例如

    if(fabsf(y)%200==0){
       //add new cells below, drop old cells at the top
    }
    
    如中所示,如果您的单元格高度为50px,它将每4个单元格命中此方法

    B.每次添加新单元格/删除旧单元格时更新动态indexPath。它将是最上面单元格的indexPath。基于此,您可以计算当前“分配”的单元格数量以及从数组中提取单元格数据的点:

    for (int n = dynamicIndexPath; n<dynamicIndexPath+numberOfCells; n++){
       //this is the window onto your data.
    }
    

    for(int n=dynamicIndexPath;n为什么不允许用户以其他方式访问数据,例如:

  • 搜索功能
  • 数据的子分类
  • 也许值得一提的是,由于数据量如此之大,您的用户是否真的会向下滚动那么远?如果必须,是否会对用户体验产生负面影响

    为了参数起见,如果您想保护内存使用,您必须根据偏移量动态添加和删除单元格。标准UITableview方法在这方面做得非常好

    在任何情况下,您在任何时候分配的单元格数量都应该考虑到您在单元格中放入的内容,例如图像与文本。如果是图像,那么100k将导致大量应用程序捆绑(除非您根据需要从服务器中取出它们).如果是文本,只需使用苹果自己的UITableView方法,因为它们会更有效

    但是,如果您坚持这种方法,并希望推出自己的自定义修复程序,您可以在UIScrollView中布局一堆UIView,并使用UIScrollView的contentOffset来了解何时添加和删除单元格。实际添加单元格应该在屏幕外完成

    A.在scrollViewDidScroll中,观察与单元格高度对齐的特定偏移,例如

    if(fabsf(y)%200==0){
       //add new cells below, drop old cells at the top
    }
    
    如中所示,如果您的单元格高度为50px,它将每4个单元格命中此方法

    B.每次添加新单元格/删除旧单元格时更新动态indexPath。它将是最上面单元格的indexPath。基于此,您可以计算当前“分配”的单元格数以及从数组中提取单元格数据的点:

    for (int n = dynamicIndexPath; n<dynamicIndexPath+numberOfCells; n++){
       //this is the window onto your data.
    }
    

    用于(int n=dynamicIndexPath;您希望用户在表视图中滚动10万条记录吗?是的,我们可以从用户那里得到任何东西,可能是他滚动到几千条,导致应用程序内存过高,导致内存警告。这不是很有用。总之,如果您删除,当用户再次滚动时,您希望发生什么g以前的记录?然后我肯定会加载100条记录的块,并将它们添加到数组的开头。你希望用户在表视图中滚动100000条记录吗?是的,我们可以从用户那里得到任何东西,可能是他滚动到数千条,导致应用程序内存过高,导致内存警告。这不是很有用。总之,wh如果删除以前的记录,那么当用户再次向上滚动时,您认为会发生什么情况?然后,我将加载100条记录的块,并将它们添加到数组的开头。