IsEqual non sempre funziona per NSIndexPath? Cosa posso usare al suo posto?
-
05-10-2019 - |
Domanda
Ho avuto qualche codice che si basa sul confronto tra due NSIndexPaths e l'esecuzione di codice differente sulla base della loro uguaglianza o la loro mancanza (usando -isEqual). Il più delle volte funziona correttamente, ma a volte non è così. Ho usato la console di debug per testare i due indexpaths durante l'esecuzione di codice, e sembrano identici a me.
Ecco il codice:
- (BOOL)selectedStreetIsSameAsLastSelectedStreet
{
return [self.indexPathOfSelectedStreet isEqual:self.previousObject.indexPathOfSelectedStreet];
}
Ecco l'output durante l'esecuzione del codice:
(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'
sto facendo qualcosa di sbagliato, o c'è un altro modo per testare in modo affidabile l'uguaglianza di due NSIndexPaths?
Soluzione
Come su iOS 5 si può semplicemente utilizzare isEqual:
(vedi commenti)
Prova
[indexPath1 compare: indexPath2] == NSOrderedSame
.
Forse ha trovato un bug in NSIndexPath
. Se si tenta di creare un nuovo NSIndexPath
con un percorso che già esiste si dovrebbe ottenere che uno invece. Così isEqual:
probabilmente solo a confronto i puntatori e non gli indici effettivi memorizzati.