32 votes

isEqual ne fonctionne pas toujours pour NSIndexPath ? Que puis-je utiliser à sa place ?

J'ai un code qui repose sur la comparaison de deux NSIndexPaths et l'exécution d'un code différent en fonction de leur égalité ou non (en utilisant -isEqual). La plupart du temps, cela fonctionne correctement, mais parfois, ce n'est pas le cas. J'ai utilisé la console du débogueur pour tester les deux indexpaths pendant l'exécution du code, et ils me semblent identiques.

Voici le code :

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

Voici la sortie pendant l'exécution du code :

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

Est-ce que je fais quelque chose de mal, ou existe-t-il un autre moyen de tester de manière fiable l'égalité de deux NSIndexPaths ?

63voto

Sven Points 13090

Essayez [indexPath1 compare: indexPath2] == NSOrderedSame .

Peut-être avez-vous trouvé un bug dans NSIndexPath . Si vous essayez de créer un nouveau NSIndexPath avec un chemin qui existe déjà, vous devriez obtenir celui-là à la place. Donc isEqual: ne fait probablement que comparer les pointeurs et non les indices réels stockés.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X