我有一些代码依赖于比较两个NSINDEXPATH并根据其平等或缺乏(使用-isequal)执行不同的代码。大多数时候它正常工作,但有时却没有。我已经使用了调试器控制台在代码执行过程中测试两个INDEXPATH,它们看起来与我相同。

这是代码:

- (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'

我是做错了什么,还是有其他方法可以可靠地测试两个NSINDEXPATH的平等?

有帮助吗?

解决方案

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


尝试 [indexPath1 compare: indexPath2] == NSOrderedSame.

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top