问题
I got a separate thread that creates a UIView object, inserts it into the UITableView's data source and then call reloadData on the UITableView. However, since it is a separate thread, it cannot call reloadData directly, it needs to make the mainthread do it... but how do you tell the mainthread to do it?
Thanks
回答1:
[self.tableView performSelectorOnMainThread:@selector(reloadData)
withObject:nil
waitUntilDone:NO];
回答2:
You can use dispatch async, this method allows you to marshal worker thread to blocks of in-line code rather than methods using performSelectorOnMainThread:
dispatch_async(dispatch_get_main_queue(), ^{
[self.tableview reloadData];
});'
回答3:
How about something like this? (may not compile, I am typing it out)
- (void) callReloadData
{
if ([NSThread isMainThread]) {
@synchronized (self.tableView) {
[self.tableView reloadData];
}
} else {
[self performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:YES];
}
}
来源:https://stackoverflow.com/questions/7914299/ios-another-thread-needs-to-send-reloaddata-to-the-mainthread