Question

J'ai un code qui repose sur la comparaison de deux NSIndexPaths et l'exécution de code différent en fonction de leur égalité ou leur absence (en utilisant -isEqual). La plupart du temps, il fonctionne correctement, mais parfois il ne fonctionne pas. Je l'ai utilisé la console de débogage pour tester les deux indexpaths pendant l'exécution du code, et ils ont l'air identique à moi.

Voici le code:

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

Voici la sortie lors de 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'

Ai-je fait quelque chose de mal, ou est-il une autre façon que je peux tester de manière fiable l'égalité de deux NSIndexPaths?

Était-ce utile?

La solution

Comme d'iOS 5, vous pouvez simplement utiliser isEqual: (voir commentaires)


Essayez [indexPath1 compare: indexPath2] == NSOrderedSame.

Peut-être que vous avez trouvé un bogue dans NSIndexPath. Si vous essayez de créer une nouvelle NSIndexPath avec un chemin qui existe déjà, vous devriez obtenir que l'on place. Donc isEqual: probablement compare simplement les pointeurs et non les indices réels stockés.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top