2013-03-05 2 views
0

У меня есть tableView и вам необходимо выполнить функцию после перезагрузки tableView. Как узнать, закончилось ли reloadData? Допустим, у меня есть методA, который заполняет tableView, и как только [tableView1 reloadData] был завершен, я хочу вызвать методB. Кто-нибудь может мне с этим помочь? Я много часов искал ... Спасибо!Функция вызова только после перезагрузкиДата закончилась

- (void) methodA 
{ 

    NSString *URLa = [NSString stringWithFormat:@"http://www.website.com/page.php? 
    v1=%@&v2=%@&v3=%@",v1, v2, v3]; 

    NSURL *url = [NSURL URLa]; 

    NSURLRequest *request = [NSURLRequest requestWithURL:url]; 
    (void) [[NSURLConnection alloc] initWithRequest:request delegate:self]; 

    [tableView1 reloadData]; 

} 
+1

http://stackoverflow.com/questions/4163579/how-to-detect-the-end-of-loading-of-uitableview –

+0

Благодаря @Anil - Ive на самом деле пытался, но нужен метод для огонь, даже если результаты не возвращаются. На самом деле, мне нужно, чтобы он срабатывал ТОЛЬКО, если результаты не возвращаются. Ответ в этом сообщении не будет срабатывать, если tableView пуст. – Brandon

+0

Обратите внимание, что 'initWithRequest' запускает асинхронную операцию. Вы должны вызвать 'reloadData' в' connectionDidFinishLoading' - и тогда вы знаете, есть ли результаты или нет! –

ответ

2

Проблема в том, что вы называете reloadData немедленно после запуска запроса URL. Это не имеет смысла, потому что запрос не был завершен в этот момент.

Правильный способ заключается в том, чтобы позвонить reloadData и methodB в connectionDidFinishLoading, после того как вы обновили источник данных с ответом по запросу URL-адреса. В этот момент вы знаете, что количество строк равно нулю или нет, и нет необходимости в в режиме ожидания для завершения обновления таблицы.

5

Вы можете добавить метод/категорию на UITableView или даже подкласс UITableView:

-(void)reloadDataAndWait:(void(^)(void))waitBlock { 
    [self reloadData];//if subclassed then super. else use [self.tableView 
    if(waitBlock){ 
     waitBlock(); 
    } 
} 

И вы должны использовать его в качестве

[self.tableView reloadDataAndWait:^{ 
    //call the required method here            
}]; 
+0

Hi Anoop, выглядит очень интересно но я не уверен, как его реализовать. У вас есть еще какое-то направление? – Brandon

+0

Я показал, как его использовать. –

+0

Я получаю сообщение об ошибке «Нет видимого интерфейса» в строке self reloadData и где я помещаю себя .tableview reloadDataAndWait? Я помещаю это в viewdidappear? – Brandon

2

Как только я получу обновленные данные с сервера для таблицы.

Я использую следующий снимок кода, чтобы скрыть индикатор выполнения при завершении перезагрузки таблицы.

[UIView animateWithDuration:0 animations:^{ 
      [your_table_view reloadData]; 
     } completion:^(BOOL finished) 
     { 
      //Table reload completed TODO here 
      //Hide progress bar etc. 
     }]; 
Смежные вопросы