比较NSIndexPath

时间:2013-06-24 15:22:38

标签: ios uitableview nsindexpath

这将是非常愚蠢的事情,但我在我的cellForRowAtIndexPath中有这个代码:

if ([self.indexPathSelected compare:indexPath] == NSOrderedSame)
{
    NSLog(@" %d %d %d %d", self.indexPathSelected.row, self.indexPathSelected.section, indexPath.row, indexPath.section);
}

打印:

0 0 0 0

0 0 1 0

0 0 2 0

0 0 3 0

0 0 4 0

0 0 5 0

我原以为它只打印0 0 0 0。

我在这里做错了什么?

2 个答案:

答案 0 :(得分:35)

由于您将indexPathSelected设置为nil,因此您需要在进行比较之前确保它是非零的。

if (self.indexPathSelected && [self.indexPathSelected compare:indexPath] == NSOrderedSame)
{
    NSLog(@" %d %d %d %d", self.indexPathSelected.row, self.indexPathSelected.section, indexPath.row, indexPath.section);
}

根据NSIndexPath's compare method上的文件:

  

<强>参数

     

indexPath

     

要比较的索引路径。

     

此值不得为零。如果值为nil,则行为为   未定义。

答案 1 :(得分:3)

有趣的是,您可以像比较指针那样比较对象。但仅限iPhone 5s,可能更高。我今天发现了这个笑话。所有设备上的iOS都是8.1

适用于iPhone 5s及更高版本:(将比较部分和行)

if (optionsPath != pathForOptionsCellOfSelected)
//if ([optionsPath compare:pathForOptionsCellOfSelected] != NSOrderedSame)
{
    //if user selects cell under already selected, we do not need to shift index
    if (optionsPath.row < selectedRowIndexPath.row)
    {
        pathForOptionsCellOfSelected = selectedRowIndexPath;
    }
    [_tableView insertRowsAtIndexPaths:@[pathForOptionsCellOfSelected] withRowAnimation:UITableViewRowAnimationTop];
    optionsPath = [pathForOptionsCellOfSelected copy];
}

无论如何,这不是一个好方法。