32

2つのNSIndexPathを比較し、それらの同等性または欠如に基づいて異なるコードを実行することに依存するコードがいくつかあります(-isEqualを使用)。ほとんどの場合、正しく機能しますが、機能しない場合もあります。デバッガコンソールを使用して、コード実行中に2つのインデックスパスをテストしましたが、それらは私と同じように見えます。

コードは次のとおりです。

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

私は何か間違ったことをしていますか、それとも2つのNSIndexPathの同等性を確実にテストできる別の方法がありますか?

4

1 に答える 1

63

iOS 5以降、使用できますisEqual:(コメントを参照)


試してみてください[indexPath1 compare: indexPath2] == NSOrderedSame

でバグを見つけたかもしれませんNSIndexPathNSIndexPathすでに存在するパスを使用して新しいパスを作成しようとする場合は、代わりにそのパスを取得する必要があります。したがってisEqual:、おそらく、格納されている実際のインデックスではなく、ポインタを比較するだけです。

于 2010-09-24T21:23:20.383 に答える