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)
[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.