Сравнение объектов основных данных - PullRequest
10 голосов
/ 09 февраля 2010

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

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

Ответы [ 2 ]

10 голосов
/ 09 февраля 2010

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

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

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

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

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

Протест

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

5 голосов
/ 09 февраля 2010

Возможно, вы захотите прочитать эту статью:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...