2011-10-27 43 views
7

我有一個單獨的線程創建一個UIView對象,將它插入到UITableView的數據源中,然後在UITableView上調用reloadData。然而,由於它是一個單獨的線程,它不能直接調用reloadData,它需要讓mainthread做到這一點......但是你如何告訴mainthread去做呢?iOS - 另一個線程需要發送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]; 
});' 
相關問題