iOS UITableView reloadData仅在我第二次调用reload函数时刷新表

时间:2012-03-22 22:24:33

标签: ios cocoa-touch uitableview reloaddata

这是我的重装功能

- (void) reloadTable:(id)sender
{   
    NSLog(@"Reload Table");
    NSLog(@"%@",[appDelegate queryList]);
    [self.driverTable reloadData];
    [self.driverTable setNeedsLayout];
    [self.driverTable setNeedsDisplay];
}

这是我从webservice

接收数据后调用的地方
if( [elementName isEqualToString:@"Response"]) {
    Response = NO;
    LookupView *lookupView = [[LookupView alloc] initWithNibName:@"LookupView" bundle:nil];
    [lookupView reloadTable:self];
}

我现在遇到的问题是在按下查找按钮并接收数据后进行搜索。该表不会刷新新数据。如果我再次按下查找按钮再次调用相同的功能,表格将重新加载。现在我知道数据存在,因为我在调用表重新加载之前打印出数组。

任何想法为什么?

2 个答案:

答案 0 :(得分:6)

我遇到了同样的问题。根据Apple的文档,不应在插入或删除行的方法中调用reloadData。我使用的一种解决方法是将调用延迟到reloadData,以便在更新表之后不会立即调用。试试这个:

[self performSelector:@selector(delayedReloadData) withObject:nil afterDelay:0.5];

在适当的地方,具有以下delayReloadData实现

 -(void)delayedReloadData{
    [self.tableView reloadData];
}

我从这种方法看到的负面影响是,如果表格行可见,则在显示其内容之前会有短暂的延迟。

答案 1 :(得分:0)

我发现你在elementName中看到if loop正在进行XML解析。为什么在解析代码中需要load a NIB file。有什么用?您可以像这样调用reloadTable:方法。

[self reloadTable:self];

您正在使用app delegate文件中的某个数组填充tableView。那么你在ViewController中初始化了你的委托吗?