2013-06-25 70 views
0

我正在下載一個字符串,其中包含在線文件的內容,並將這些組件按字符串分隔到數組中。UITableView未更新iOS

一旦下載完成,我正在調用一個方法來更新我的tableview來顯示這些值。

- (void)updateTableView { 
    tableView.delegate = self; 
    tableView.dataSource = self; 
} 

基本上在這個方法我設置委託和數據源,以便表視圖獲取使用此方法更新中...

- (UITableViewCell *)tableView:(UITableView *)tView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [[UITableViewCell alloc] init]; 
    cell.textLabel.text = [arrayDownloaded objectAtIndex:indexPath.row]; 
    return cell; 
} 

但問題是是表視圖沒有更新直到我「觸摸」視圖。

像所有的數據加載和方法已被調用,但直到我點擊屏幕上的任何地方沒有tableview得到更新?

爲什麼會這樣以及如何在設置委託和數據源時立即更新它?

-Henry

+0

在你的'updateTableView'中添加'[tableView reloadData];'' – danypata

+0

這不是正常的行爲,所以你需要發佈更多的代碼,以便我們希望能夠發現你的問題。 –

+0

@TimothyMoose謝謝你的回覆,你需要什麼代碼? –

回答

1

我想出瞭解決方案。而不是調用[self updateTableView];調用下面的方法...

- (void)updateTableView { 
    [tableView reloadData]; 
} 

我需要做的[self performSelectorOnMainThread:@selector(updateTableView) withObject:nil waitUntilDoneNO];

有人呼籲這是iOS的錯誤,因爲如果你不是主線程numberOfRowsInSection上被調用,但cellForRowAtIndexPath沒有。

只是一件奇怪的事情,我看到在我的應用程序中發生。希望這有助於未來的開發人員。

-Henry

+0

UIKit代碼必須始終在主線程上運行。否則可能會導致未定義的行爲。所以我不確定任何人都可以調用iOS bug的奇怪行爲。很高興你知道了。 –

+0

你也可以[tableView performSelectorOnMainThread:@selector(reloadData)withObject:nil waitUntilDoneNO] – RiceAndBytes

0

如果您尚未這樣做的地方,你需要調用[tableView reloadData]已應用更改後。

1

只需在完成下載後重新加載tabledata

- (void)updateTableView 
{ 
    tableView.delegate = self; 
    tableView.dataSource = self; 
    [tableView reloadData]; 
} 
+0

仍然不會重新加載,直到我與表格視圖交互。 –