私は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ならすぐにセレクタを呼び出しますので、このコードは無意味です。 (私はあなたが '@synchronized'ブロックを投げ入れる理由を知りませんでした。) – titaniumdecoy
あなたはディスパッチ非同期を使用することができます(コンパイルされないことがあり、私はそれを入力していますが)、この方法は、使用してのインラインコードのブロックではなく、メソッドにワーカースレッドをマーシャリングするperformSelectorOnMainThreadことができます:
dispatch_async(dispatch_get_main_queue(), ^{
[self.tableview reloadData];
});'
私はこの行をコピーするためにここに来ました:)。 Tq –