2010-09-24 10 views
32

Tengo un código que se basa en la comparación de dos NSIndexPaths y la ejecución de código diferente en función de su igualdad o la falta de la misma (utilizando -isEqual). La mayoría de las veces funciona correctamente, pero a veces no funciona. He utilizado la consola del depurador para probar los dos indexpaths durante la ejecución del código, y se ven idénticos a mí.isEqual no siempre funciona para NSIndexPath? ¿Qué puedo usar en su lugar?

Aquí está el código:

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

Aquí está la salida durante la ejecución del código:

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

¿Estoy haciendo algo mal, o hay otra manera de que pueda probar de forma fiable la igualdad de dos NSIndexPaths?

Respuesta

63

A partir de iOS 5 sólo puede utilizar isEqual: (ver comentarios)


Trate [indexPath1 compare: indexPath2] == NSOrderedSame.

Quizás ha encontrado un error en NSIndexPath. Si intentas crear un nuevo NSIndexPath con una ruta que ya existe, deberías obtener esa en su lugar. Entonces, isEqual: probablemente solo compara los punteros y no los índices almacenados.

+0

Perfecto. ¡Gracias por la rápida respuesta! – JoBu1324

+2

Me inclino a pensar que esto también puede ser un error. Estoy teniendo el mismo problema en iOS 4.2 b3. –

+0

Creo que esto se debe a que '-isEqual:' solo está haciendo una comparación de puntero de las dos rutas de índice. –

Cuestiones relacionadas