2010-09-24 4 views
32

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, cela fonctionne correctement, mais parfois non. J'ai utilisé la console du débogueur pour tester les deux chemins d'index pendant l'exécution du code, et ils me semblent identiques.isEqual ne fonctionne pas toujours pour NSIndexPath? Que puis-je utiliser à sa place?

Voici le code:

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

est ici 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' 

Est-ce que je fais quelque chose de mal, ou est-il une autre façon, je peux sûrement tester l'égalité des deux NSIndexPaths?

Répondre

63

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 un nouveau NSIndexPath avec un chemin qui existe déjà, vous devriez en obtenir un à la place. Donc isEqual: probablement juste compare les pointeurs et non les indices réels stockés.

+0

Parfait. Merci pour la réponse rapide! – JoBu1324

+2

Je suis enclin à penser que cela peut être un bug aussi. J'ai le même problème dans iOS 4.2 b3. –

+0

Je crois que c'est parce que '-isEqual:' fait juste une comparaison de pointeur des deux chemins d'index. –

Questions connexes