2011-10-27 44 views
7

我有一个单独的线程创建一个UIView对象,将它插入到UITableView的数据源中,然后在UITableView上调用reloadData。然而,由于它是一个单独的线程,它不能直接调用reloadData,它需要让mainthread做到这一点......但是你如何告诉mainthread去做呢?iOS - 另一个线程需要发送reloadData到主线程

感谢

回答

20
[self.tableView performSelectorOnMainThread:@selector(reloadData) 
           withObject:nil 
           waitUntilDone:NO]; 
+1

我来这里复制这一行:)。 Tq –

1

怎么这样呢? (可能无法编译,我打字吧)

- (void) callReloadData 
{ 
    if ([NSThread isMainThread]) { 
     @synchronized (self.tableView) { 
      [self.tableView reloadData]; 
     } 
    } else { 
     [self performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:YES]; 
    } 
} 
+1

'performSelectorOnMainThread:'如果'waitUntilDone:'是YES,将立即调用它的选择器,所以这段代码没有意义。 (我不知道你为什么选择抛出'@ synchronized'块)。 – titaniumdecoy

7

您可以使用调度异步,这种方法可以让您使用编组工作线程的主代码块,而不是方法performSelectorOnMainThread:

dispatch_async(dispatch_get_main_queue(), ^{ 
    [self.tableview reloadData]; 
});' 
相关问题