UIView オブジェクトを作成し、それを UITableView のデータ ソースに挿入し、UITableView で reloadData を呼び出す別のスレッドを取得しました。ただ、別スレッドなので直接 reloadData を呼べないので、メインスレッドにやらせる必要があるのですが…どうやってメインスレッドにやらせるのですか?
ありがとう
UIView オブジェクトを作成し、それを UITableView のデータ ソースに挿入し、UITableView で reloadData を呼び出す別のスレッドを取得しました。ただ、別スレッドなので直接 reloadData を呼べないので、メインスレッドにやらせる必要があるのですが…どうやってメインスレッドにやらせるのですか?
ありがとう
[self.tableView performSelectorOnMainThread:@selector(reloadData)
withObject:nil
waitUntilDone:NO];
非同期ディスパッチを使用できます。このメソッドを使用すると、performSelectorOnMainThread を使用するメソッドではなく、ワーカー スレッドをインライン コードのブロックにマーシャリングできます。
dispatch_async(dispatch_get_main_queue(), ^{
[self.tableview reloadData];
});'
このようなものはどうですか?(コンパイルできないかもしれません、私はそれを打ち込んでいます)
- (void) callReloadData
{
if ([NSThread isMainThread]) {
@synchronized (self.tableView) {
[self.tableView reloadData];
}
} else {
[self performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:YES];
}
}