UITableView willDisplayCell - происходит нечто странное - PullRequest
3 голосов
/ 11 октября 2011

У меня есть источник данных (productsArry), который заполняется через SQLite, и я выбираю 25 элементов одновременно.Я вызываю делегат UITableView 'willDisplayCell', и когда indexPath.row равен количеству productsArry, он получит новые данные и перезагрузит представление таблиц.Это прекрасно работает без проблем, но скажем, если источник данных имеет 100 объектов, которые отображаются в виде таблицы, а затем productsArry отфильтрован с меньшим количеством объектов (скажем, 50) и выполняет reloadData, что снова хорошо, но проблеманаходится в делегате willDisplayCell.По какой-то причине этот метод вызывается без пользовательской прокрутки.Таким образом, он думает, что ячейка 25 тоже была прокручена, и теперь он будет получать следующий набор строк из базы данных.Он будет продолжать это делать до тех пор, пока не достигнет 100 объектов из последнего набора данных или не найдет ничего другого для извлечения из фильтра.

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell    forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (([self.productsArry count] != 0) && (indexPath.row == [self.productsArry count])) 
    {
        self.currentOffset += TableviewRowCount;
        [self performSelector:@selector(reloadTableView:) withObject:nil afterDelay:0.2];
    }
}

- (void)reloadTableView:(id)sender
{
    NSLog(@"reloadtable");
    [self fetchData];
    [self.productTableView reloadData];
}

Пожалуйста, дайте мне знать, если вам нужно знать что-то еще, что можетпомочь разобраться.

1 Ответ

7 голосов
/ 11 октября 2011

Что вы делаете, так это перезагрузите всю таблицу, ячейки и все, когда вы вызываете reloadData. Вот почему вызывается willDisplayCell - он вызывается для всех видимых ячеек. Это, вероятно, не очень хорошая идея делать это в то время. Что вы хотите сделать, это просто перезагрузить новый раздел таблицы - посмотрите вместо этого на reloadRowsAtIndexPaths: withRowAnimation :. Большинство приложений не выполняют автоматическое получение, когда попадают в конец списка, они имеют последнюю ячейку, являющуюся кнопкой, или просят пользователя сбросить список (а-ля Facebook), чтобы добавить больше контента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...