isEqual nicht immer für NSIndexPath arbeiten? Was kann ich an seiner Stelle verwenden?
-
05-10-2019 - |
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?
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.