我正在调用两个webservices,我在一个tableview中显示这两个内容。由于我是异步调用,我想先加载先到先得的数据,然后在第二次服务完成时再次调用。这些服务的响应被插入到它们各自的部分中,因此我将它们保存在各自的NSarrays中。
A - >到网络服务 - >每当响应到达时,tableView reloadData
B - >到Web服务 - >每当响应到达时,tableView reloadData
-(void)UpdateTable{
if (_firstRequest || _secondRequest){
runningRefresh = false;
[self.tableView reloadData];
[self removeLoading];
}
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
if (section == 0){
return 1;
}
else if (section == 1){
if (!_firstRequest){
return 1;
}else{
NSLog(@"SECTION 1");
if ([self._collectionsNewGame isKindOfClass:[NSNull class]] || [self._collectionsNewGame count] == 0){
NSLog(@"0 COUNT");
return 0;
}
NSLog(@"%ld COUNT",[self._collectionsNewGame count]);
return [self._collectionsNewGame count] + 1;
}
}
else if (section == 2){
if (!_thirdRequest){
return 1;
}else{
if ([self._collectionsRandom isKindOfClass:[NSNull class]] || [self._collectionsRandom count] == 0){
return 0;
}
return [self._collectionsRandom count] + 1;
}
}
else return 0;
//count number of row from counting array hear cataGorry is An Array
}
我只是在cellrowatindexpath中阅读并显示它。
但是,当我这样做的时候,有些行细胞没有出现并且行为奇怪。知道怎么做到这一点吗?
答案 0 :(得分:0)
在一个数据源中整合这些服务的响应,如果您想要的只是向NSArray
添加行而不是使用UITableView
,请说reloadData
需要insertRowsAtIndexPaths: withRowAnimation :
。确保您拥有正确的验证
最后使用主队列执行UITableview
更新
[self performSelectorOnMainThread:@selector(updateTable)
withObject:object
waitUntilDone:YES]
通过将YES
传递给waitUntilDone
,您阻止了该方法已完成的主线程。
以同样的方式使用
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
[self updateTable];
}];
不同之处在于,这种方法并不能保证何时执行updateTable
。该队列中可能还有其他项目仍在等待执行。