32

我有一些代码依赖于比较两个 NSIndexPaths 并根据它们的相等或不相等(使用 -isEqual)执行不同的代码。大多数时候它可以正常工作,但有时却不能。我在代码执行期间使用调试器控制台测试了两个索引路径,它们看起来和我一模一样。

这是代码:

- (BOOL)selectedStreetIsSameAsLastSelectedStreet
{
    return [self.indexPathOfSelectedStreet isEqual:self.previousObject.indexPathOfSelectedStreet];
}

这是代码执行期间的输出:

(gdb) po self.indexPathOfSelectedStreet
<NSIndexPath 0x60a0770> 2 indexes [26, 1]
(gdb) po self.previousObject.indexPathOfSelectedStreet
<NSIndexPath 0x55b4f70> 2 indexes [26, 1]
(gdb) p (BOOL)[self.indexPathOfSelectedStreet isEqual:self.previousObject.indexPathOfSelectedStreet]
$2 = 0 '\000'

我做错了什么,还是有另一种方法可以可靠地测试两个 NSIndexPaths 的相等性?

4

1 回答 1

63

从 iOS 5 开始,您可以使用isEqual:(见评论)


试试[indexPath1 compare: indexPath2] == NSOrderedSame

也许你在NSIndexPath. 如果您尝试NSIndexPath使用已经存在的路径创建一个新路径,则应该使用该路径。所以isEqual:可能只是比较指针而不是存储的实际索引。

于 2010-09-24T21:23:20.383 回答