我有通过SQLite填充的数据源(productsArry),每次一次获取25个项目。我正在调用“ willDisplayCell” UITableView委托,当indexPath.row等于productsArry计数时,它将获取新数据并重新加载表视图。这很好用,没有问题,但是可以说如果数据源有100个对象,这些对象正在表视图中显示,然后productArry已用较少的对象进行过滤(例如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];
}


如果您需要了解其他可能有助于清除问题的信息,请告诉我。

最佳答案

当您调用reloadData时,您正在做的是重新加载整个表,单元格以及所有内容。这就是为什么将调用willDisplayCell的原因-将为所有可见单元格调用它。那时这样做可能不是一个好主意。您要做的只是重新加载表的新部分-而是查看reloadRowsAtIndexPaths:withRowAnimation:。大多数应用在到达列表末尾时都不会自动获取,它们的最后一个单元格是一个按钮,或者要求用户退回列表(例如Facebook)以添加更多内容。

关于iphone - UITableView willDisplayCell-发生了一些奇怪的事情,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7727961/

10-09 00:29