Isequalは、NSINDEXPATHで常に機能するとは限りませんか?その代わりに何を使用できますか?
-
05-10-2019 - |
質問
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:
おそらく、保存された実際のインデックスではなく、ポインターを比較するだけです。
所属していません StackOverflow