Перенос элементов из NSArray в NSSet для NSManagedObject - PullRequest
2 голосов
/ 18 августа 2011

Два связанных вопроса:

  1. Когда вы используете [NSSet setWithArray:], автоматически ли он удаляет дубликат для вас?

  2. Как вы можетеСкажите NSSet, что именно вы хотите, чтобы слово «дубликат» означало?Т.е. если у вас есть куча объектов «Колледж-курс», каждый с именем и номером раздела, и вы хотите перенести их в NSSet, сохраняя только один из каждого курса колледжа для данного имени (например, если у вас было три секцииисчисления, как бы вы сказали, чтобы сохранить только один раздел исчисления, даже если их номера разделов отличаются, поэтому они не воспринимаются как идентичные по умолчанию).

Спасибо!Дайте мне знать, если этот вопрос был вообще неясен.У меня возникли проблемы с поиском способа обозначить это.

Редактировать: Этот вопрос относится только к NSManagedObjects, чей метод isEqual: не может быть переопределен.

1 Ответ

7 голосов
/ 18 августа 2011
  1. Из документации :

    Если один и тот же объект появляется в массиве более одного раза, он добавляется только один раз в возвращаемый набор.

  2. Равенство определяется здесь, как и во всем Какао, методом -isEqual: (и методом -hash).Если вы хотите, чтобы два пользовательских объекта считались равными, вы должны переопределить их соответствующим образом, и вы должны переопределить оба.Они обычно используются для того, чтобы объекты, которые действительно эквивалентны и, как правило, взаимозаменяемы (но являются отдельными объектами), можно было рассматривать как таковые.В вашем примере кажется, что объекты курса колледжа действительно «разные» (т. Е. Они представляют разные классы, даже если они могут иметь общую тему «исчисления»), поэтому проблематично назвать эти экземпляры объекта «равными»если это крупномасштабный проект / кодовая база.В вашем случае вы можете рассмотреть возможность добавления объекта в набор один за другим и делать свои собственные сравнения по мере добавления, чтобы убедиться, что вы получаете одну из каждой «темы».

...