使用无限滚动时在我的表格视图中重复数据

Posted

技术标签:

【中文标题】使用无限滚动时在我的表格视图中重复数据【英文标题】:Duplicate data in my tableview while using endless scroll 【发布时间】:2016-09-18 23:07:38 【问题描述】:

我正在使用这种方法在我的 tableview 中实现无限滚动:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView_

CGFloat actualPosition = scrollView_.contentOffset.y ;
CGFloat contentHeight = scrollView_.contentSize.height - (700);
NSLog(@"table: %f", self.tableView.frame.size.height);
if (actualPosition >= contentHeight)
  // self.articles = NULL;
    [self makeRequest:currentpage++];
    [self.articlesArray addObjectsFromArray:articles];
    [self.tableView reloadData];



我从这样的网络服务获取数据:

-(void)makeRequest:(int)page1


NSString *urlString = [NSString
                       stringWithFormat:@"http://url/wp-json/wp/v2/posts?page=%d",(int) page1];

NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:urlString]];

NSData *theData = [NSURLConnection sendSynchronousRequest:request
                                        returningResponse:nil
                                                    error:nil];

self.articles = [NSJSONSerialization JSONObjectWithData:theData
                                                     options:NSJSONReadingMutableContainers
                                                       error:nil];


在我的视图控制器的 viewDidLoad 中如下:

- (void)viewDidLoad 
[super viewDidLoad];

self.articlesArray = [[NSMutableArray alloc] init];
 self.articles = [[NSMutableArray array]init];
currentpage = 0;

在显示新数据之前,我获得了两次数据。如何防止这种情况发生?

【问题讨论】:

【参考方案1】:

当发出这样的寻呼请求时,只需跟踪请求是否正在进行。在文件的界面中跟踪变量,例如:

bool isLoadingMoreData = NO

那么,当你提出请求时:

-(void)makeRequest:(int)page1

if (self.isLoadingMoreData) 
    return

self.isLoadingMoreData = YES

NSString *urlString = [NSString
                       stringWithFormat:@"http://url/wp-json/wp/v2/posts?page=%d",(int) page1];

NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:urlString]];

NSData *theData = [NSURLConnection sendSynchronousRequest:request
                                        returningResponse:nil
                                                    error:nil];

self.articles = [NSJSONSerialization JSONObjectWithData:theData
                                                     options:NSJSONReadingMutableContainers
                                                       error:nil];

self.isLoadingMoreData = NO


这是防止重复请求的简单方法

【讨论】:

以上是关于使用无限滚动时在我的表格视图中重复数据的主要内容,如果未能解决你的问题,请参考以下文章

添加新数据时,Tableview 会滚动到顶部。无限滚动

颤振 ListView.builder 的无限滚动

如何在 Rails 中实现无限滚动

使用 XCUI 测试用例测试 UICollectionView 无限滚动

我正在尝试在我的 UITableViewController 中实现无限滚动,但不确定如何使用返回的数据库结果

Swift - viewControllers 之间的无限滚动