我有一個單獨的線程創建一個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 –