Isequalは、NSINDEXPATHで常に機能するとは限りませんか?その代わりに何を使用できますか?

StackOverflow https://stackoverflow.com/questions/3791044

質問

2つのnSindexpathsを比較し、その平等またはその欠如(-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つのnsindexpathsの平等を確実にテストできる別の方法がありますか?

役に立ちましたか?

解決

iOS 5の時点で、使用することができます isEqual: (コメントを参照)


試す [indexPath1 compare: indexPath2] == NSOrderedSame.

多分あなたはバグを見つけました NSIndexPath. 。新しいものを作成しようとする場合 NSIndexPath すでに存在するパスでは、代わりにそれを手に入れる必要があります。それで isEqual: おそらく、保存された実際のインデックスではなく、ポインターを比較するだけです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top