Tôi đang cố gắng để có được một danh sách các tài khoản twitter để tải lên một UITableViewController có chứa dữ liệu. Tôi sử dụng chức năng này:(iOS 5) khi nhận danh sách tài khoản Twitter, TableView bị treo?
- (void)viewDidLoad {
[accountStore requestAccessToAccountsWithType:accountType withCompletionHandler:^(BOOL granted, NSError *error) {
...
[[self tableView] insertRowsAtIndexPaths ...];
[[self tableView] reloadData];
NSLog("This message appears immediately");
...
}];
NSLog("This message appears immediately");
}
Đối với một số lý do, giao diện có vẻ "treo" trong 5 giây trước khi bảng thực sự được cập nhật/vẽ lại (lưu ý rằng TÔI gọi reloadData!). Tất cả các thông điệp tường trình của tôi được in ngay lập tức, vì vậy tôi không chắc chắn điều gì khiến giao diện bị đóng băng.
Vấn đề là các cuộc gọi giao diện người dùng phải xảy ra trên chuỗi chính và '-requestAccessToAccountsWithType: withCompletionHandler:' không đảm bảo rằng khối hoàn thành của nó sẽ được gọi trên chuỗi chính. Việc bạn sử dụng 'dispatch_async' là chính xác ở đây, mặc dù nếu bạn có nhiều xử lý hơn trước khi thực hiện cuộc gọi giao diện người dùng thì bạn có thể tự do thực hiện nó trong hàng đợi nền trước cuộc gọi' dispatch_async'. –
Cảm ơn bạn đời, đã gặp vấn đề tương tự với chế độ xem khác đang trì hoãn. Điều này giải quyết nó cho tôi. – thgc
Mã mẫu của Apple sử dụng performSelectorOnMainThread: withObject: waitUntilDone: để xử lý thực tế rằng phương thức xử lý được thực hiện trên một hàng đợi tùy ý. – sam