iOS - другой поток должен отправить reloadData в mainthread - PullRequest
7 голосов
/ 27 октября 2011

Я получил отдельный поток, который создает объект UIView, вставляет его в источник данных UITableView и затем вызывает reloadData для UITableView.Однако, поскольку это отдельный поток, он не может напрямую вызывать reloadData, ему нужно, чтобы mainthread делал это ... но как вы скажете mainthread сделать это?

Спасибо

Ответы [ 3 ]

21 голосов
/ 27 октября 2011
[self.tableView performSelectorOnMainThread:@selector(reloadData)
                                 withObject:nil
                              waitUntilDone:NO];
7 голосов
/ 26 июля 2015

Вы можете использовать диспетчеризацию асинхронно, этот метод позволяет маршалировать рабочий поток в блоки встроенного кода, а не методы с помощью executeSelectorOnMainThread:

dispatch_async(dispatch_get_main_queue(), ^{
    [self.tableview reloadData];
});'
1 голос
/ 27 октября 2011

Как насчет этого? (возможно, не компилируется, я его печатаю)

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