Müssen Sie die Gleichheit von Beziehungen rekursiv einbeziehen (d. H. Beziehungen zeigen auf Ziele, die Ihrer Definition entsprechen)? Müssen Sie die Gleichheit zwischen verwalteten Objektmodellen testen? Müssen Sie nicht festgeschriebene Werte testen? „Nein“, um alle diese die Antwort Unter der Annahme ist, ist die Lösung nicht zu hart ...
instance1
-instance2
von Ihrer Definition gleich ist, wenn:
NSArray *allAttributeKeys = [[[instance1 entity] attributesByName] allKeys];
if([[instance1 entity] isEqual:[instance2 entity]]
&& [[instance1 committedValuesForKeys:allAttributeKeys] isEqual:[instance2 committedValuesForKeys:allAttributeKeys]]) {
// instance1 "==" instance2
}
Wenn die Antwort auf eine der oben genannten Fragen sind "Ja", die Lösung ist wesentlich komplexer.
Caveat
bin ich irgendetwas davon nicht sicher eine gute Idee ist. Sie möchten wahrscheinlich Ihr Design überdenken, wenn Sie die obige Lösung verwenden müssen. Es gibt mit ziemlicher Sicherheit bessere Möglichkeiten, das zu tun, was Sie tun, ohne dabei Gefahr zu laufen, mit den Absichten von Core Data zu kollidieren.
Obwohl dies eine solide Lösung ist, stimme ich am besten mit Ihrem Vorbehalt überein. Wenn Sie jeden Wert in einem Objekt mit einem anderen vergleichen müssen, um zu sehen, ob Sie Daten duplizieren, dann stimmt etwas nicht mit dem Design und Sie müssen es neu überdenken. –