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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top