Сравнение объектов основных данных

Есть ли простой/общий способ сравнить два объекта, чтобы увидеть, одинаковы ли они? "То же" я имею в виду идентичное имя сущности, все атрибуты и отношения одинаковы, но внутренний идентификатор объекта отличается.

Аналогично, есть ли простой/общий способ найти различия?

Ответ 1

Нужно ли рекурсивно включать равенство отношений (т.е. отношения указывают на адресатов, которые равны вашему определению)? Нужно ли тестировать равенство между моделями управляемых объектов? Нужно ли тестировать незафиксированные значения? Предполагая, что ответ "нет" всем этим, решение не слишком сложно...

instance1 равен instance2 вашим определением, если:

NSArray *allAttributeKeys = [[[instance1 entity] attributesByName] allKeys];

if([[instance1 entity] isEqual:[instance2 entity]]
&& [[instance1 committedValuesForKeys:allAttributeKeys] isEqual:[instance2 committedValuesForKeys:allAttributeKeys]]) {
  // instance1 "==" instance2
}

Если ответ на любой из вышеуказанных вопросов "да", решение значительно сложнее.

Caveat

Я не уверен, что это хорошая идея. Вероятно, вы захотите переосмыслить свой дизайн, если вам нужно использовать вышеприведенное решение. Есть почти наверняка лучшие способы делать то, что вы пытаетесь сделать, не рискуя запугивать намерения Core Data.

Ответ 2

Вы можете прочитать эту статью:

http://moottoot.blogspot.com/2008/02/core-data-and-uniqueness.html

NSManagedObject имеет метод isEqual:, который вы не можете переопределить. Пробовали ли вы использовать этот метод, чтобы проверить, возвращается ли он для разных объектов? Различные классы переопределяют этот метод (NSObject), так что "равно" означает "одни и те же объекты" или "объекты с одним и тем же содержимым".