【发布时间】:2017-11-21 06:16:00
【问题描述】:
我在表格视图中加载字典数组,重新加载表格后,我调用了一个方法,该方法从数组中更改字典数据,然后刷新/重新加载表格视图的特定索引。但是除非我的完整数据没有再次更新,否则我无法滚动表格。
我调用我的方法并重新加载表的代码:
- (void)parserDidEndDocument:(NSXMLParser *)parser {
[Hud hideAnimated:true];
[self.myTbl reloadData];
dispatch_async(dispatch_get_main_queue(),^{
[self loadTutorials];
});
}
我尝试更新表数据的方法。
#pragma mark:GetAllData
-(void)loadTutorials{
dispatch_async(dispatch_get_main_queue(),^{
int k = 0;
for (NSMutableString*linknew in linkArr) {
//here some calculations code for parsing then next
for (TFHppleElement *elements in contributorsNodes) {
// 5
for (TFHppleElement *child in elements.children) {
if ([child.tagName isEqualToString:@"img"]) {
// 7
@try {
NSString*url = [child.attributes objectForKey:@"src"];
NSMutableDictionary*dict = [[feeds objectAtIndex:k] mutableCopy];
[dict setObject:url forKey:@"image"];
[feeds removeObjectAtIndex:k];
[feeds insertObject:dict atIndex:k];
NSIndexPath*index = [NSIndexPath indexPathForRow:k inSection:0];
[self.myTbl reloadRowsAtIndexPaths:@[index] withRowAnimation:UITableViewRowAnimationNone];
}
@catch (NSException *e) {}
}
}
}k++;
}
});
}
cellForRowAtIndexPath 方法:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
UILabel*lbl = (UILabel*)[cell viewWithTag:101];
UIImageView*imgView = (UIImageView*)[cell viewWithTag:103];
[imgView sd_setImageWithURL:[NSURL URLWithString:[[feeds objectAtIndex:indexPath.row] objectForKey:@"image"]] placeholderImage:[UIImage imageNamed:@"img.jpg"]];
lbl.text = [NSString stringWithFormat:@"%@",[[feeds objectAtIndex:indexPath.row] objectForKey: @"title"]];
return cell;
}
【问题讨论】:
-
我假设你是
disptch_async,因为数据处理需要很长时间——如果是这样,将这项工作分派到主队列是没有意义的——尽管如此,你还是会阻塞主线程。您应该将您的工作分派到后台队列,然后将与 UI 更新相关的部分分派到主队列。 -
@Losiowaty 感谢您的回复。我把方法 [self.myTbl reloadRowsAtIndexPaths:@[index] withRowAnimation:UITableViewRowAnimationNone];在 disptch_async 中并从我的方法开始中删除 disptch_async 但仍然是同样的问题
标签: ios objective-c iphone uitableview