Как нажать представление загрузки после выбора UITableView? - PullRequest
0 голосов
/ 01 июня 2011

Сейчас у меня проблемы с отображением вида загрузки.Процесс выглядит следующим образом:

  • Выберите строку в UITableView
  • Вытяните UITableView из основного представления
  • Выдвиньте представление загрузки в основное представление
  • Вызовите длинный метод, который используетЗапросы JSON

Проблема в том, что когда я выбираю строку в таблице, она останавливается там до тех пор, пока все не будет завершено.Как мне обойти это?

Ответы [ 2 ]

0 голосов
/ 03 июня 2017

Используйте GCD и отправьте асинхронный запрос, когда запрос завершится, перейдите в основной поток и сделайте, что вы хотите.

//addProgressIndicator
__weak typeof(self) weakSelf = self;
dispatch_async(dispatch_get_global_queue(0, 0), ^{
    //call your request. Here could be your call back too, depends to architecture of your code
    NSDictionary *response = [WebService sendRequest];

    dispatch_async(dispatch_get_main_queue(), ^{

        //removeProgressIndicator
        //do what you want after request is finished with your UI

    });
});
0 голосов
/ 01 июня 2011

Вы хотите загрузить данные в отдельном потоке. Лично я бы вставил представление загрузки в главное представление, а затем создал новый поток, который загружает данные. После загрузки данных вы можете выполнить маршалинг обратно в поток пользовательского интерфейса, закрыть представление загрузки, а затем представить любое представление, в котором вы будете отображать свои данные.

Ваша реализация будет выглядеть примерно так:

// push loading view..
// spawn thread
[NSThread detachNewThreadSelector:@selector(loadData:) toTarget:self withObject:nil];

-(void)loadData:(id) obj {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    // load your data
    [self performSelectorOnMainThread:@selector(updateUI:) withObject:data waitUntilDone:NO];
    [pool release];
}

-(void)updateUI:(id)data {
    // update the data
}
...