2010-09-24 10 views
32

Ich habe etwas Code, der auf dem Vergleich von zwei NSIndexPaths und der Ausführung von unterschiedlichem Code beruht, basierend auf ihrer Gleichheit oder dem Fehlen derselben (mit -isEqual). Die meiste Zeit funktioniert es richtig, aber manchmal nicht. Ich habe die Debugger-Konsole verwendet, um die beiden Indexpfade während der Codeausführung zu testen, und sie sehen für mich identisch aus.isEqual funktioniert nicht immer für NSIndexPath? Was kann ich an seiner Stelle verwenden?

Hier ist der Code:

- (BOOL)selectedStreetIsSameAsLastSelectedStreet 
{ 
    return [self.indexPathOfSelectedStreet isEqual:self.previousObject.indexPathOfSelectedStreet]; 
} 

Hier ist die Ausgabe während der Ausführung des Codes:

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

Bin ich etwas falsch zu machen, oder gibt es eine andere Weise, die ich zuverlässig die Gleichheit testen kann zwei NSIndexPfade?

Antwort

63

Ab iOS 5 kann man einfach isEqual: (siehe Kommentare) verwenden [indexPath1 compare: indexPath2] == NSOrderedSame


Versuchen.

Vielleicht haben Sie einen Fehler in NSIndexPath gefunden. Wenn Sie versuchen, einen neuen NSIndexPath mit einem bereits vorhandenen Pfad zu erstellen, sollten Sie stattdessen diesen Pfad verwenden. So isEqual: vergleicht wahrscheinlich nur die Zeiger und nicht die tatsächlichen Indizes gespeichert.

+0

Perfekt. Danke für die schnelle Antwort! – JoBu1324

+2

Ich bin geneigt zu denken, dass dies auch ein Fehler sein könnte. Ich habe das gleiche Problem in iOS 4.2 b3. –

+0

Ich glaube, das liegt daran, dass '-isEqual:' nur einen Zeigervergleich der beiden Indexpfade durchführt. –