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

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

Точно так же существует ли легкий/универсальный способ найти различия?

10
задан N. R. Gresham 9 February 2010 в 03:43
поделиться

2 ответа

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

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.

10
ответ дан 3 December 2019 в 22:36
поделиться

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

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

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

5
ответ дан 3 December 2019 в 22:36
поделиться