iOS - 另一个线程需要向主线程发送reloadData。

7

我有一个单独的线程,创建了一个UIView对象,将其插入到UITableView的数据源中,然后调用UITableView的reloadData方法。但是,由于它是一个单独的线程,无法直接调用reloadData方法,需要让主线程来完成...但是如何告诉主线程来完成呢?

谢谢!

3个回答

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

1
我来这里复制这一行 :) 。谢谢。 - Kiran Ruth R

7
您可以使用 dispatch_async,这种方法允许您将工作线程调度到内联代码块而不是使用 performSelectorOnMainThread: 方法调用方法。
dispatch_async(dispatch_get_main_queue(), ^{
    [self.tableview reloadData];
});'

0

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

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

1
如果waitUntilDone:为YES,performSelectorOnMainThread:将立即调用其选择器,因此该代码毫无意义。(我不知道您为什么要加入synchronized块。) - titaniumdecoy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接