IsEqual no siempre funciona para NSIndexPath? ¿Qué puedo usar en su lugar?
-
05-10-2019 - |
Pregunta
Tengo algo de código que se basa en la comparación de dos NSIndexPaths y ejecutar código diferente en función de su igualdad o la falta de ella (usando -isEqual). La mayoría de las veces funciona correctamente, pero a veces no lo hace. He usado la consola de depuración para probar los dos indexpaths durante la ejecución de código, y se ven idénticas a mí.
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?
Solución
Lo de iOS 5 sólo puede utilizar isEqual:
(ver comentarios)
Trate
[indexPath1 compare: indexPath2] == NSOrderedSame
.
Tal vez ha encontrado un fallo en NSIndexPath
. Si intenta crear un nuevo NSIndexPath
con un camino que ya existe usted debe conseguir que una vez. Así isEqual:
probablemente sólo compara los punteros y no los índices reales almacenados.