isEqual并不总是适用于NSIndexPath?我可以用它来代替什么?

时间:2010-09-24 21:13:37

标签: objective-c equality iphone-sdk-3.2 nsindexpath

我有一些代码依赖于比较两个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的相等性?

1 个答案:

答案 0 :(得分:63)

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

<小时/> 试试[indexPath1 compare: indexPath2] == NSOrderedSame

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