Trong ứng dụng của tôi, tôi có một UITableViewController.Tải lại dữ liệu của UITableView ở chế độ nền
Bảng của nó được chia thành 3 phần.
Tôi tải xuống dữ liệu cho từng phần đó từ máy chủ của tôi. Để làm điều này, tôi có 3 chức năng (ví dụ f1 f2 và f3). Mỗi cập nhật một NSArray tương ứng, được sử dụng làm nguồn dữ liệu cho bảng của tôi.
Bây giờ những gì tôi muốn là tải lại dữ liệu bằng cách sử dụng chức năng này và làm mới tableView của tôi sau khi 3 chức năng này được thực hiện, nhưng không làm phiền người dùng.
Tôi không được sử dụng với yêu cầu, khối, chuỗi, v.v. không đồng bộ và tôi đang tìm kiếm các mẹo.
Trên thực tế, đây là những gì tôi làm:
-(void)viewDidLoad
{
//some settings
[NSTimer scheduledTimerWithTimeInterval:15.0 target:self selector:@selector(reloadDatas) userInfo:nil repeats:YES];
dispatch_queue_t queue = dispatch_get_main_queue();
dispatch_async(queue, ^{
[self reloadDatas];
});
}
-(void)reloadDatas
{
dispatch_queue_t concurrentQueue = dispatch_get_main_queue();
dispatch_async(concurrentQueue, ^{
[self f1];
[self f2];
[self f3];
[myDisplayedTable reloadData];
});
}
-(void)f1
{
//load datas with a url request and update array1
}
-(void)f2
{
//load datas with a url request and update array2
}
-(void)f3
{
//load datas with a url request and update array3
}
Nhưng ở đây, tableView của tôi là "đóng băng" cho đến khi nó được làm mới.
Tôi không quan tâm đến thứ tự thực hiện f1 f2 và f3, nhưng tôi cần phải đợi 3 hàm này được thực hiện trước khi làm mới tableView của tôi.
Cảm ơn sự giúp đỡ của bạn.
EDIT
Cảm ơn tất cả những câu trả lời của bạn.
Dưới đây là giải pháp làm việc:
Như mros suggets, tôi loại bỏ các hàng đợi công văn từ viewDidLoad, và thay thế trong reloadDatas:
dispatch_queue_t concurrentQueue = dispatch_get_main_queue();
với
dispatch_queue_t mainThreadQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
Và cuối cùng, Tôi tải lại bảng của mình trong một chủ đề chính
dispatch_async(dispatch_get_main_queue(), ^{ [myDisplayedTable reloadData]; });
Bạn đã tạo concurrentQueue chưa? – abhi1992