2011-11-03 35 views
8

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.

Trả lời

16

Tất cả,

Vì vậy, tôi đã tìm ra (loại). Tôi đoán nó có một cái gì đó để làm với các chủ đề, tôi không phải làm bất kỳ công cụ giao diện người dùng trong chủ đề đó.

Để khắc phục nó, tôi được bao quanh những thứ bảng với một số mã dispatching:

[account requestAccessToAccountsWithType:accountType withCompletionHandler:^(BOOL granted, NSError *error) 
{ dispatch_async(dispatch_get_main_queue(), ^{ 
    ... 
});}]; 

Tuy nhiên cần phải hiểu những gì đang xảy ra ở đây, nhưng hy vọng điều này sẽ giúp nếu ai đó chạy vào cùng một vấn đề.

+0

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'. –

+0

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

+2

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

Các vấn đề liên quan