如果不使用indexpath

时间:2012-06-19 05:07:30

标签: objective-c ios xcode uitableview nsindexpath

我想知道为什么这不起作用请帮助我。 这是我的代码

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath 

*)indexPath
{
    if (selectedIndexPath == indexPath) {
        selectedIndexPath = nil;
    } else {
        selectedIndexPath = indexPath;
    }
    [self.tableView deselectRowAtIndexPath : indexPath animated : NO];
    [tableView beginUpdates];
    [tableView endUpdates];
}

2 个答案:

答案 0 :(得分:0)

确保您保留selectedIndexPath,以便无意中将其设置为nil

@interface YourClass

@property (nonatomic, strong) NSIndexPath *selectedIndexPath;

@end

然后将变量称为self.selectedIndexPath,你应该没问题。

但还有第二个警告。 NSIndexPath是一个对象,因此运算符==只会比较指针地址。显然,那些将永远是不同的,因为一个是你的变量,另一个是方法的私有变量!您想要使用的是

if ([indexPath isEqualTo:selectedIndexPath]) // not tested

if (indexPath.row == selectedIndexPath.row && 
    indexPath.section == selectedIndexPath.section)

答案 1 :(得分:0)

NSIndexPath对象由行和部分两部分组成。 indexPathForRow:inSection:方法从行和节索引号创建NSIndexPath对象。确保正确创建selectedIndexPath。请按照此apple reference了解详情。