12

这将是一件非常愚蠢的事情,但我的 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。

我在这里做错了什么?

4

2 回答 2

35

由于您将 indexPathSelected 设置为 nil,因此您希望在进行比较之前确保它不是 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 比较方法的文档:

参数

索引路径

要比较的索引路径。

该值不能为零。如果值为 nil,则行为未定义。

于 2013-06-24T17:43:05.743 回答
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];
}

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

于 2014-11-26T07:39:56.370 回答