¿Necesita recursivamente incluir igualdad de relaciones (es decir, las relaciones apuntan a destinos que son iguales según su definición)? ¿Necesita probar la igualdad entre los modelos de objetos administrados? ¿Necesita probar valores no confirmados? Suponiendo que la respuesta es "no" a todo esto, la solución no es demasiado difícil ...
instance1
es igual a instance2
por su definición si:
NSArray *allAttributeKeys = [[[instance1 entity] attributesByName] allKeys];
if([[instance1 entity] isEqual:[instance2 entity]]
&& [[instance1 committedValuesForKeys:allAttributeKeys] isEqual:[instance2 committedValuesForKeys:allAttributeKeys]]) {
// instance1 "==" instance2
}
Si la respuesta a cualquiera de las anteriores las preguntas son "sí", la solución es significativamente más compleja.
Advertencia
No estoy seguro de nada de esto es una buena idea. Es probable que desee volver a pensar su diseño si necesita utilizar la solución anterior. Es casi seguro que hay mejores formas de hacer lo que intenta hacer que no corren el riesgo de interferir con las intenciones de Core Data.
Si bien esta es una solución sólida, estoy más de acuerdo con su advertencia. Si tiene que comparar cada valor en un objeto con otro para ver si está duplicando datos, entonces hay algo mal en el diseño y necesita volver a pensarlo. –