В большинстве случаев это происходит, когда вы действительно создаете классы NSManagedObject (или их свойства) дважды.
В вашем случае вы создали код для классов Friend и Person благодаря меню Editor.команда.Затем вы интегрировали эти модули в свой проект.Таким образом, компилятор компилирует эти классы.
НО
Скорее всего, вы не изменили параметр генерации класса CoreData.Вы можете найти эту опцию на панели CoreData инспектора (раздел Class, меню Codegen).Может принимать 3 значения: «Вручную / Нет», «Определение класса» или «Категория / расширение».
Я полагаю, что вы остались со стандартным «Определением класса», что означает, что когда XCode компилирует вашу модель,он временно генерирует быстрые модули для каждой вашей сущности и компилирует эти модули.Таким образом, вы получите 2 модуля с именем «Друг» и 2 модуля с именем «Персона».Следовательно, ошибка.
Если вы хотите использовать сгенерированные редактором модули, скорее всего потому, что вы хотите изменить их, тогда вам следует установить в меню Codegen значение «Manual / None» или «Category / extension».Вы можете сделать это для каждой индивидуальной сущности.
Некоторые согласованные варианты использования:
- У вас есть сущность, и вы просто не хотите ничего трогать: класс «keep»Определение "как выбор Codegen и не генерируйте код класса с помощью редактора, пусть XCode сделает все.
- У вас есть сущность, и вы хотите изменить ее, например, вы хотите добавить руководство awakeFromInsertкод.Однако вы хотите, чтобы XCode продолжал генерировать средства доступа для атрибутов при их изменении.Сгенерируйте код для модуля, включите его в свой проект (но не в расширение для атрибутов), измените его, но оставьте «Category / extension» в качестве опции генерации.
- Вы хотите управлять всем самостоятельно:сгенерируйте код объекта один раз, включите его в свой проект и выберите «Manual / None».Теперь позаботьтесь о том, чтобы при изменении некоторых атрибутов / отношений вам приходилось поддерживать синхронизацию кода вручную.