使用无限滚动时在我的表格视图中重复数据
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
这是防止重复请求的简单方法
【讨论】:
以上是关于使用无限滚动时在我的表格视图中重复数据的主要内容,如果未能解决你的问题,请参考以下文章
使用 XCUI 测试用例测试 UICollectionView 无限滚动