7

我有一个单独的线程,它创建一个 UIView 对象,将其插入 UITableView 的数据源,然后在 UITableView 上调用 reloadData。但是,由于是单独的线程,所以不能直接调用reloadData,需要让主线程来做……但是怎么告诉主线程来做呢?

谢谢

4

3 回答 3

21
[self.tableView performSelectorOnMainThread:@selector(reloadData)
                                 withObject:nil
                              waitUntilDone:NO];
于 2011-10-27T09:57:38.673 回答
7

您可以使用异步调度,此方法允许您将工作线程编组为内联代码块,而不是使用 performSelectorOnMainThread 的方法:

dispatch_async(dispatch_get_main_queue(), ^{
    [self.tableview reloadData];
});'
于 2015-07-25T21:23:42.820 回答
0

这样的事情怎么样?(可能无法编译,我正在输入它)

- (void) callReloadData
{
    if ([NSThread isMainThread]) {
        @synchronized (self.tableView) {
            [self.tableView reloadData];
        }
    } else {
        [self performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:YES];
    }
}
于 2011-10-27T09:59:00.150 回答