2016-08-30 70 views
-2

我解析了API響應UITableView的數據。但是在這裏我得到了viewDidAppear方法中的響應,然後在完成響應之後,我想將數據更新到TableView,但它沒有更新。我按照以下方法TableView不更新

- (void)viewDidAppear:(BOOL)animated { 

       [super viewDidAppear:animated]; 
     // Response here ..Service call // 
       NSLog(@"viewDidAppear running"); 
     [self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:TRUE]; 
    } 

,也是我試圖[self.tableView reloadData]TableView沒有更新,你可以請建議我如何能夠克服this.Thank你。

+0

可以您將顯示API響應方法 –

+1

我猜* *服務調用*是異步的。並且在主隊列上使用'dispatch_async'而不是'performSelectorOnMainThread' – vadian

+1

如果你的服務是異步的,你應該在響應數據可用時調用響應塊中的reloadData,以便更好地支持它提供的請求/響應機制 – frankfg

回答

3

您不能從後臺線程調用UITableView#reloadData。所以,你真的需要來安排,就在主線程上一個:調用Web服務調用後,下面的方法,當你得到後,響應添加此

if (yourArray.count>0) 
{ 
dispatch_async(dispatch_get_main_queue(), ^{ 
    [self.tableView reloadData]; 
}); 
} 

不需要這個

- (void)viewDidAppear:(BOOL)animated { 

       [super viewDidAppear:animated]; 
     // Response here ..Service call // 
       NSLog(@"viewDidAppear running"); 
     [self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:TRUE]; 
    } 
+0

它們都在主線程上運行,唯一的區別是dispatch_Async運行立即,但performSelectorOnMainthread處理常見的運行循環模式。我懷疑這個問題應該在從服務器獲取響應之前調用重載數據。您建議的dispatch_async調用應位於服務器調用完成塊中。 –

+0

@TejaNandamuri - 可能你是對的,如果提問者顯示一些代碼,我們可以很容易識別 –

+0

感謝它的工作很好@Karthik –