gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 11:45:48 28 4
gpt4 key购买 nike

每当一个元素在 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] 行在每个元素完成后被调用。但是,tableview 不会更新为正确的文本。

- (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 已正确设置为此文件中的委托(delegate)和数据源

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

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

如何让它们以正确的方式逐渐出现?

最佳答案

试试这个——将 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];
}
}
}

关于ios - 在 NSXMLParser 方法 didFinishElement 中为 UITableView 调用 reloadData 无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44013527/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com