iOS UITableView reloadData обновляет таблицу только при втором вызове функции перезагрузки - PullRequest
5 голосов
/ 23 марта 2012

Вот моя функция перезагрузки

- (void) reloadTable:(id)sender
{   
    NSLog(@"Reload Table");
    NSLog(@"%@",[appDelegate queryList]);
    [self.driverTable reloadData];
    [self.driverTable setNeedsLayout];
    [self.driverTable setNeedsDisplay];
}

Здесь я вызываю ее после получения данных от веб-службы

if( [elementName isEqualToString:@"Response"]) {
    Response = NO;
    LookupView *lookupView = [[LookupView alloc] initWithNibName:@"LookupView" bundle:nil];
    [lookupView reloadTable:self];
}

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

Есть идеи, почему?

Ответы [ 2 ]

6 голосов
/ 23 марта 2012

Я столкнулся с той же проблемой.Согласно документации Apple, reloadData «не должен вызываться в методах, которые вставляют или удаляют строки».Обходной путь, который я использовал, заключается в том, чтобы отложить вызов reloadData, чтобы он не сразу после обновления таблицы.Попробуйте это:

[self performSelector:@selector(delayedReloadData) withObject:nil afterDelay:0.5];

в соответствующем месте со следующей реализацией delayReloadData

 -(void)delayedReloadData{
    [self.tableView reloadData];
}

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

0 голосов
/ 23 марта 2012

Я обнаружил, что вы делаете анализ XML, увидев, что elementName в вашем if loop.Зачем вам нужно load a NIB file в вашем коде парсинга.Какая польза от этого?Вы можете просто вызвать свой метод reloadTable: следующим образом.

[self reloadTable:self];

Вы заполняете свой tableView, используя некоторый массив в вашем файле app delegate.Итак, вы инициализировали своего делегата в вашем ViewController?

...