Frage

Ich habe einig Code bekommt, die zwei NSIndexPaths auf dem Vergleich beruht und Durchführung verschiedene Codes auf der Grundlage ihrer Gleichheit oder davon ermangeln (mit -isEqual). Die meiste Zeit funktioniert es richtig, aber es funktioniert manchmal nicht. Ich habe die Debugger-Konsole verwendet, um die zwei indexpaths während der Ausführung von Code zu testen, und sie sieht gleich zu mir.

Hier ist der Code:

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

Hier ist der Ausgang 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 zweier NSIndexPaths testen kann?

War es hilfreich?

Lösung

Ab iOS 5 kann man einfach nutzen isEqual: (siehe Kommentare)


Versuchen Sie [indexPath1 compare: indexPath2] == NSOrderedSame.

Vielleicht finden Sie einen Fehler in NSIndexPath. Wenn Sie versuchen, einen neuen NSIndexPath mit einem Pfad zu erstellen, die bereits vorhanden ist, sollten Sie stattdessen, dass man bekommen. So isEqual: wahrscheinlich vergleicht nur die Zeiger und nicht die tatsächliche Indizes gespeichert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top