在 NSXMLParser 方法 didFinishElement 中为 UITableView 调用 reloadData 无效

Calling reloadData for UITableView in NSXMLParser method didFinishElement has no effect

每次在 XML 文件中解析完一个元素时,我都会尝试更新单元格 UITableView 列表。

我尝试通过 运行 我的 UITableViewController 中的以下代码来做到这一点:

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
        if ([elementName isEqualToString:@"item"]) {
            [self.tableView reloadData];
        }
    }

    - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
    {
        if (!([string isEqualToString:@"\n  "] || [string isEqualToString:@"\n"])) {
            [_idArray addObject:string];
        }
    }

使用断点我可以看到在每个元素完成后调用行 [self.tableview reloadData]。但是,table视图不会更新为正确的文本。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
    // Configure the cell...
    if (_idArray.count > 0) {
        [cell.detailTextLabel setText:[_idArray objectAtIndex:indexPath.row]];
    }

    return cell;
}

我将 numberofrowsinsection 设置为 _idArray.count,将 numberofsectionsintableview 设置为 1

TableView 已正确设置为此文件中的委托和数据源

如果我在每个 reloadData 之后添加一个 sleep(1),它会等待一秒钟并正确地 NSLogs,但不会重新加载实际的 table。

当整个文件解析完成后,它们突然都正常显示了。

如何让它们以正确的方式逐渐显示?

试试这个——将 reloadData 包装在主队列 GCD(Grand Central Dispatch)中

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
        if ([elementName isEqualToString:@"item"]) {
           dispatch_async(dispatch_get_main_queue(), ^{
              [self.tableView reloadData];
           }
        }
}