2011-10-27 29 views
7

Tôi nhận được một chuỗi riêng biệt tạo đối tượng UIView, chèn nó vào nguồn dữ liệu của UITableView và sau đó gọi reloadData trên UITableView. Tuy nhiên, vì nó là một thread riêng biệt, nó không thể gọi reloadData trực tiếp, nó cần phải làm cho mainthread làm điều đó ... nhưng làm thế nào để bạn nói với mainthread để làm điều đó?iOS - một chủ đề khác cần gửi reloadData đến maint2read

Cảm ơn

Trả lời

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

Tôi đến đây để sao chép dòng này :). Tq –

1

Làm thế nào về một cái gì đó như thế này? (Có thể không biên dịch, tôi đang gõ nó ra)

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

'performSelectorOnMainThread:' sẽ gọi trình chọn của nó ngay lập tức nếu 'waitUntilDone:' là YES, vì vậy mã này vô nghĩa. (Tôi cũng không biết tại sao bạn lại chọn ném một khối '@ synchronized'.) – titaniumdecoy

7

Bạn có thể sử dụng công văn async, phương pháp này cho phép bạn sắp xếp sợi nhân viên cho các khối mã trong dòng chứ không phải là phương pháp sử dụng performSelectorOnMainThread:

dispatch_async(dispatch_get_main_queue(), ^{ 
    [self.tableview reloadData]; 
});' 
Các vấn đề liên quan