2016-08-30 75 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 –