2011-10-27 10 views
7

Mam osobny wątek, który tworzy obiekt UIView, wstawia go do źródła danych UITableView, a następnie wywołuje reloadData na UITableView. Jednakże, ponieważ jest to osobny wątek, nie może wywoływać bezpośrednio reloadData, musi zrobić mainthread to zrobić ... ale jak powiedzieć mainthread, aby to zrobić?iOS - inny wątek musi wysłać reloadData do mainthread

Dzięki

Odpowiedz

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

Przyszedłem tu skopiować tę linię :). Tq –

1

Jak o czymś takim? (Może nie skompilować, piszę go)

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

'performSelectorOnMainThread:' natychmiast wywoła swój selektor, jeśli 'waitUntilDone:' ma wartość YES, więc ten kod jest bezcelowy. (Nie mam pojęcia, dlaczego zdecydowałeś się również rzucić blok '@ synchronized'.) – titaniumdecoy

7

Można użyć wysyłki asynchronicznie, metoda ta pozwala zebrać wątku roboczego do bloków kodu w linii zamiast metod korzystania performSelectorOnMainThread:

dispatch_async(dispatch_get_main_queue(), ^{ 
    [self.tableview reloadData]; 
});' 
Powiązane problemy