这将是非常愚蠢的事情,但我在我的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。
我在这里做错了什么?
答案 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];
}
无论如何,这不是一个好方法。