2011-10-27 4 views
7

私はUIViewオブジェクトを作成し、UITableViewのデータソースに挿入し、UITableViewでreloadDataを呼び出します。しかし、それは別のスレッドであるため、reloadDataを直接呼び出すことはできません。メインスレッドはそれを行う必要があります...しかし、mainthreadにそれをどうやって伝えますか?iOS - 別のスレッドがmainthreadにreloadDataを送信する必要があります

おかげ

答えて

20
[self.tableView performSelectorOnMainThread:@selector(reloadData) 
           withObject:nil 
           waitUntilDone:NO]; 
+1

私はこの行をコピーするためにここに来ました:)。 Tq –

1

どのようにこのようなものでしょうか?

- (void) callReloadData 
{ 
    if ([NSThread isMainThread]) { 
     @synchronized (self.tableView) { 
      [self.tableView reloadData]; 
     } 
    } else { 
     [self performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:YES]; 
    } 
} 
+1

'performSelectorOnMainThread:'は 'waitUntilDone:'がYESならすぐにセレクタを呼び出しますので、このコードは無意味です。 (私はあなたが '@synchronized'ブロックを投げ入れる理由を知りませんでした。) – titaniumdecoy

7

あなたはディスパッチ非同期を使用することができます(コンパイルされないことがあり、私はそれを入力していますが)、この方法は、使用してのインラインコードのブロックではなく、メソッドにワーカースレッドをマーシャリングするperformSelectorOnMainThreadことができます:

dispatch_async(dispatch_get_main_queue(), ^{ 
    [self.tableview reloadData]; 
});' 
関連する問題