我有一个单独的线程创建一个UIView对象,将它插入到UITableView的数据源中,然后在UITableView上调用reloadData。然而,由于它是一个单独的线程,它不能直接调用reloadData,它需要让mainthread做到这一点......但是你如何告诉mainthread去做呢?iOS - 另一个线程需要发送reloadData到主线程
感谢
我有一个单独的线程创建一个UIView对象,将它插入到UITableView的数据源中,然后在UITableView上调用reloadData。然而,由于它是一个单独的线程,它不能直接调用reloadData,它需要让mainthread做到这一点......但是你如何告诉mainthread去做呢?iOS - 另一个线程需要发送reloadData到主线程
感谢
[self.tableView performSelectorOnMainThread:@selector(reloadData)
withObject:nil
waitUntilDone:NO];
怎么这样呢? (可能无法编译,我打字吧)
- (void) callReloadData
{
if ([NSThread isMainThread]) {
@synchronized (self.tableView) {
[self.tableView reloadData];
}
} else {
[self performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:YES];
}
}
'performSelectorOnMainThread:'如果'waitUntilDone:'是YES,将立即调用它的选择器,所以这段代码没有意义。 (我不知道你为什么选择抛出'@ synchronized'块)。 – titaniumdecoy
您可以使用调度异步,这种方法可以让您使用编组工作线程的主代码块,而不是方法performSelectorOnMainThread:
dispatch_async(dispatch_get_main_queue(), ^{
[self.tableview reloadData];
});'
我来这里复制这一行:)。 Tq –