UIView 개체를 생성하고 UITableView의 데이터 소스에 삽입 한 다음 UITableView에서 reloadData를 호출하는 별도의 스레드가 있습니다. 그러나 별도의 스레드이므로 reloadData를 직접 호출 할 수 없으며 mainthread가 수행해야합니다.iOS - 다른 스레드가 mainthread에 reloadData를 보내야 함
감사
UIView 개체를 생성하고 UITableView의 데이터 소스에 삽입 한 다음 UITableView에서 reloadData를 호출하는 별도의 스레드가 있습니다. 그러나 별도의 스레드이므로 reloadData를 직접 호출 할 수 없으며 mainthread가 수행해야합니다.iOS - 다른 스레드가 mainthread에 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이면 즉시 selector를 호출 할 것이므로이 코드는 무의미하다. (왜'@synchronized' 블록을 던지기로 결정했는지 모르겠다.) – titaniumdecoy
당신은 파견 비동기을 사용할 수 있습니다 (컴파일하지 않을 수 있습니다, 나는 그것을 입력하고는),이 방법은 사용 인라인 코드 블록이 아닌 방법으로 작업자 스레드를 마샬링하는 performSelectorOnMainThread 수 있습니다 :
dispatch_async(dispatch_get_main_queue(), ^{
[self.tableview reloadData];
});'
이 줄을 복사하려면 여기로 왔습니다 :). Tq –