我有一些代码依赖于比较两个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的相等性?
答案 0 :(得分:63)
从iOS 5开始,您可以使用isEqual:
(参见评论)
<小时/> 试试
[indexPath1 compare: indexPath2] == NSOrderedSame
。
也许您在NSIndexPath
中发现了一个错误。如果您尝试使用已存在的路径创建新的NSIndexPath
,则应该获取该路径。所以isEqual:
可能只是比较指针而不是存储的实际索引。