objective-c equality iphone-sdk-3.2 nsindexpath

objective c - isEqual no siempre funciona para NSIndexPath? ¿Qué puedo usar en su lugar?



objective-c equality (1)

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 ella (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í.

Aquí está el código:

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

Aquí está el resultado 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 forma en que puedo probar de manera confiable la igualdad de dos NSIndexPaths?


A partir de iOS 5, puedes usar isEqual: (ver comentarios)

Pruebe [indexPath1 compare: indexPath2] == NSOrderedSame .

Tal vez has encontrado un error en NSIndexPath . Si intentas crear un nuevo NSIndexPath con una ruta que ya existe, deberías obtener esa en su lugar. Así que isEqual: probablemente solo compare los punteros y no los índices almacenados.