Подтвердить что ты не робот

Дублирование символьной ошибки при добавлении подкласса NSManagedObject, дублирование ссылки

Я пытался создать подклассы NSManagedObject (2 связанные сущности) автоматически в Xcode. Они генерируются следующим образом:

enter image description here

Однако, прежде чем я сделаю что-нибудь еще, когда я попытался создать и запустить его, возникает ошибка связи, как показано:

duplicate symbol _OBJC_CLASS_$_Photo in: /Users/Kefeng/Library/Developer/Xcode/DerivedData/Photomania-aellrakjngugnzcgrleiytvrfvyt/Build/Intermediates/Photomania.build/Debug-iphonesimulator/Photomania.build/Objects-normal/x86_64/Photo+CoreDataClass.o duplicate symbol _OBJC_METACLASS_$_Photo in: /Users/Kefeng/Library/Developer/Xcode/DerivedData/Photomania-aellrakjngugnzcgrleiytvrfvyt/Build/Intermediates/Photomania.build/Debug-iphonesimulator/Photomania.build/Objects-normal/x86_64/Photo+CoreDataClass.o duplicate symbol _OBJC_CLASS_$_Photography in: /Users/Kefeng/Library/Developer/Xcode/DerivedData/Photomania-aellrakjngugnzcgrleiytvrfvyt/Build/Intermediates/Photomania.build/Debug-iphonesimulator/Photomania.build/Objects-normal/x86_64/Photography+CoreDataClass.o duplicate symbol _OBJC_METACLASS_$_Photography in: /Users/Kefeng/Library/Developer/Xcode/DerivedData/Photomania-aellrakjngugnzcgrleiytvrfvyt/Build/Intermediates/Photomania.build/Debug-iphonesimulator/Photomania.build/Objects-normal/x86_64/Photography+CoreDataClass.o ld: 4 duplicate symbols for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)

Я несколько раз пытался создать новые проекты и сделать то же самое. Мое первоначальное намерение состоит в том, чтобы добавить некоторые специальные методы в подклассы. Но когда я добавляю что-либо в, например, Photo+CoreData.h/m, появилась такая же ошибка, как указано выше.

Я нашел несколько ответов о "двойном включении" или "сохранении файлов в неправильном каталоге", но я этого не делал. Кто-нибудь есть об этом?

4b9b3361

Ответ 1

Изменить: Благодаря некоторой помощи от @iPeter нашлось следующее:

После выполнения редакторa > Сгенерировать файлы NSManagedObject, если вы удалите файлы перед созданием, ваш проект не будет создавать никаких проблем.

Корзина этих файлов

Затем #import "myManagedObjectName + CoreDataClass.h" (где имя MO - это имя инспектора сущности в основных данных) в любые классы, где вам требуются управляемые объекты.

Другими словами, вам не нужны никакие из файлов ManagedObject в вашей папке. Xcode сохраняет сгенерированные файлы в папке Derived Data.

Если по какой-то причине вам нужны эти файлы, чтобы они оставались в вашем каталоге файлов, будет работать следующее обходное решение. Перейдите в свою цель и удалите источники CoreDataClass в источниках компиляции.

До

Оставив вас с этим:

После

  • Большинство новых атрибутов/отношений, которые я добавил после того, как начальное поколение подклассов ManagedObject было доступно как свойства после сборки. В одном случае, когда я переименовал существующее отношение, мне пришлось снова сделать Редактоp > Сгенерировать подклассы NSManagedObject, а затем я уничтожил новые файлы в моей папке, построил, и все работало нормально.

Просто написал сообщение в блоге, которое включает эту информацию для любого заинтересованного.

Ответ 2

Если вы не создаете подкласс подпрограмм автоматически, то не забудьте проверить настройки "Codegen" для объекта Entity in Data Model Inspector:

введите описание изображения здесь

Ответ 3

Вы должны удалить все эти объекты, изменить настройки "Codegen" на "Manual/None" для них в Data Model Inspector и снова сгенерировать объекты. Он работает хорошо! Вам не нужно удалять файлы + CoreDataClass.h из источника компиляции. Вам не нужно отмечать объекты как абстрактные. Вам не нужно создавать классы самостоятельно. Вы должны изменить только настройки "Codegen" и автоматически регенерировать объекты. введите описание изображения здесь

Ответ 4

Вам нужно удалить собственный класс, связанный с CoreData, сгенерированный вами, и вы можете сохранить строку #import с этими классами, теперь все эти файлы будут сгенерированы автоматически при создании проекта.

Ответ 5

Недавно я попробовал вышеуказанный ответ, и он не прошел. Так или иначе, Xcode все еще генерировал файлы.

Я решил это, используя следующий метод:

  • Отметить все объекты как Абстрактные
  • Построить
  • Удалить флаг
  • Построить
  • Успех!

Это звучит как ошибка в Xcode...

Ответ 6

поздняя публикация... но для меня была просто копия пасти объекта, Xcode, похоже, не изменяет имя исходного класса, связанное с сущностью (наблюдается на Xcode 9.0.1)