2012-03-22 46 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

相關問題