每次在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已正确设置为此文件中的委托和数据源
如果我在每个sleep(1)
之后添加reloadData
,它会等待一秒钟并且NSLog
正确,但不会重新加载实际的表格。
当整个文件完成解析后,它们都会突然显示出来。
如何以正确的方式逐步显示它们?
答案 0 :(得分:1)
试试这个 - 在主队列GCD(Grand Central Dispatch)中包装reloadData
- (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];
}
}
}