2012-03-22 44 views
5

这里是我的装载功能的iOS 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]; 
} 

问题我现在有我在按搜索按钮搜索并接收数据后。表格不会随新数据一起刷新。如果我再次按下查找按钮再次调用相同的函数,表格将重新加载。现在我知道数据在那里了,因为我在调用表重新加载之前打印出数组。

任何想法为什么?

+0

为什么你需要setNeedsLayout和setNeedsDisplay? UITableViews不需要重绘,它们在重载时自己处理。 – CodaFi 2012-03-22 22:28:22

+0

哦,我只是在这里研究解决方案,一些有类似问题的人提到了这个,所以我只是想 – 2012-03-22 23:09:58

+0

删除@CodaFi提到的那些方法。它不属于那里。 – 2012-03-23 06:09:46

回答

6

我遇到了同样的问题。根据Apple的文档,不应在插入或删除行的方法中调用reloadData“。我使用的解决方法是延迟对reloadData的调用,以便在更新表之后不会立即执行。在适当的位置用下面的实施delayReloadData的

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

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

一个负面影响我从这种方法看到的是,如果表行可见,有一个短暂的延迟:试试这个然后显示其内容。

+0

这似乎为我工作谢谢 – 2012-03-23 22:26:42

+0

[this](http://stackoverflow.com/questions/14018754/why-reloaddata-shouldnt-be-called-on-methods-that -delete-insert-rows)问题可以作为@ bobnoble的答案的后续行动 – abbood 2012-12-24 08:20:29

0

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

[self reloadTable:self]; 

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

+0

是的你是对的,我使用应用程序委托来填充包含表的数据的数组。一旦我知道所有的信息被加载到数组中,我使用应用程序委托在表的视图控制器中调用刷新表函数。 – 2012-03-23 21:52:46

+0

错误讯息... – 2012-03-23 22:24:45