В моем приложении у меня есть UITableViewController.Обновить данные UITableView в фоновом режиме
Его таблицаView разделена на 3 секции.
Я загружаю данные для каждого из этих разделов с моего сервера. Для этого у меня есть 3 функции (например, f1 f2 и f3). Каждый обновляет соответствующий NSArray, используемый в качестве источника данных для моей таблицы.
Теперь я хочу перезагрузить данные, используя эти функции, и обновить таблицу TableView после выполнения этих 3 функций, но не нарушая пользователя.
Я не использую асинхронный запрос, блоки, потоки и т. Д. ... и я ищу советы.
На самом деле, вот что я делаю:
-(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
}
Но вот, мой Tableview "заморожена" до тех пор, пока не будет обновлен.
Я не забочусь о порядке выполнения f1 f2 и f3, но мне нужно дождаться, пока эти 3 функции будут выполнены, прежде чем обновлять мой TableView.
Благодарим за помощь.
EDIT
Спасибо за все ваши ответы.
Вот рабочий раствор:
Как MROS suggets, я удалил очереди отправки из viewDidLoad, и заменить в reloadDatas:
dispatch_queue_t concurrentQueue = dispatch_get_main_queue();
с
dispatch_queue_t mainThreadQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
И, наконец, Я перезаряжаю стол в основной нити
dispatch_async(dispatch_get_main_queue(), ^{ [myDisplayedTable reloadData]; });
Вы создали параллельный вызов? – abhi1992