与UITableView一起使用的索引路径无效

时间:2014-07-25 22:15:36

标签: ios objective-c uitableview

我有一个方法,旨在清除所有UITableViewCellAccessories,并在调用时收到以下错误
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid index path for use with UITableView. Index paths passed to table view must contain exactly two indices specifying the section and row. Please use the category on NSIndexPath in UITableView.h if possible.'

这是方法

-(void)clearTableViewAccessories{
    NSIndexPath *indexPath = [NSIndexPath new];
     UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
    if (cell.accessoryType == UITableViewCellAccessoryCheckmark){
        cell.accessoryType = UITableViewCellAccessoryNone;
    }
}

3 个答案:

答案 0 :(得分:7)

初始化indexPath对象的方式是,创建一个长度为0且没有路径的索引路径,该路径由一个部分和一个行组成。

您应该使用指定的初始化程序

创建indexPath

indexPathForRow:inSection:

无论如何,我认为您的实施是解决问题的最佳方式。使用当前设置,您需要为要创建的每个单元格创建一个indexPath,并且对于任何不可见的单元格,您将获得nil。

最好的办法是开始查看UITableView dataSource方法,首先是tableView:cellForRowAtIndexPath:并在此处决定是否清理单元格。

答案 1 :(得分:0)

cellForRowAtIndexPath检查单元格中是否没有附件。例如,您可以修改数据源或只使用ivar BOOL noAccessory。相应地设置附件。然后简单地调用

[self.tableView reloadData];

答案 2 :(得分:0)

检查你的数字或行数和部分数量,我有一个类似的问题,我通过正确填充每个部分中的行数来解决(如果你有部分行)。如果您使用数据源更新问题,例如用于节的数组和行,将更容易回答