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

这是我的重装function

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

这是我从web服务接收数据后调用它的地方

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

我现在遇到的问题是在按下查找button并接收数据后进行search。 该表不会刷新新的数据。 如果我再次按查找button再次调用相同的函数,表重新加载。 现在我知道数据在那里,因为我打电话给表重新加载之前打印数组。

任何想法为什么?

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

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

在适当的地方用下面的delayReloadData实现

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

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

我发现你正在通过在你的if loop看到这个elementName来进行XMLparsing。 为什么你需要在parsing代码中load a NIB file ? 它有什么用处? 你可以像这样调用你的reloadTable:方法。

 [self reloadTable:self]; 

你正在使用你的app delegate文件中的一些数组来填充你的tableView。 那么你是在你的ViewController中初始化你的委托?