循环通过表视图单元格

时间:2012-08-18 03:33:31

标签: objective-c ios

for(NSUInteger j = 0 ; j < [sports count] ; j++){

    NSIndexPath *loopPath = [NSIndexPath indexPathWithIndex:j]; 

    if([pickerTable cellForRowAtIndexPath:loopPath].accessoryType == UITableViewCellAccessoryCheckmark){

        [chosenSports addObject:[pickerTable cellForRowAtIndexPath:loopPath].textLabel.text];                          

    }

}

此代码产生sigabrt错误。确切的错误是“与UITableView一起使用的索引路径无效。传递给表视图的索引路径必须包含指定段和行的两个索引。如果可能,请在UITableView.h中使用NSIndexPath上的类别。”提前致谢;

2 个答案:

答案 0 :(得分:4)

错误是正确的。 NSIndexPaths由行和节号组成,对于表格视图尤其如此,考虑到它们实际上对实现的盲目程度(考虑到它们依赖于数据源和委托)。你有一个简单的初始化错误,请尝试这样做:

for(NSUInteger j = 0 ; j < [sports count] ; j++){

    NSIndexPath *loopPath = [NSIndexPath indexPathForRow:j inSection:0]; 

    if([pickerTable cellForRowAtIndexPath:loopPath].accessoryType == UITableViewCellAccessoryCheckmark){

        [chosenSports addObject:[pickerTable cellForRowAtIndexPath:loopPath].textLabel.text];                          

    }

}

答案 1 :(得分:2)

除了@ CodaFi的回答,您应该知道cellForRowAtIndexPath会为当前不可见的行返回nil

所以你的循环只添加当前可见单元格中的对象,这可能不是你想要的。