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

Dan*_*hen 5 cocoa-touch uitableview reloaddata ios

这是我的重装功能

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

这是我从webservice接收数据后调用它的地方

if( [elementName isEqualToString:@"Response"]) {
    Response = NO;
    LookupView *lookupView = [[LookupView alloc] initWithNibName:@"LookupView" bundle:nil];
    [lookupView reloadTable:self];
}
Run Code Online (Sandbox Code Playgroud)

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

有什么想法吗?

bob*_*ble 6

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

[self performSelector:@selector(delayedReloadData) withObject:nil afterDelay:0.5];
Run Code Online (Sandbox Code Playgroud)

在适当的地方使用delayReloadData的以下实现

 -(void)delayedReloadData{
    [self.tableView reloadData];
}
Run Code Online (Sandbox Code Playgroud)

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