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

'имена файлов используются для распознавания ошибок частного объявления с тем же именем

Я получаю эту ошибку при создании NSManagedObject в Xcode 8.1 в Swift.

: 0: ошибка: имя файла "DemoOne + CoreDataClass.swift" используется дважды: '/Пользователи/Swasidhant/Desktop/demo again/DemoOne + CoreDataClass.swift' и '/Users/Swasidhant/Library/Developer/Xcode/DerivedData/demo_again-hiinrbwwbmyfbrbctsfdzvudkkuy/Build/Intermediates/demo again.build/Debug-iphonesimulator/demo again.build/DerivedSources/CoreDataGenerated/Model/DemoOne+CoreDataClass.swift ': 0: note: имена файлов используются, чтобы отличать частные объявления с тем же именем: 0: error: filename "DemoOne + CoreDataProperties.swift" используется дважды: "/Пользователи/Swasidhant/Desktop/demo снова /DemoOne + CoreDataProperties.swift" и "/Пользователи/Swasidhant/Library/Developer/Xcode/DerivedData/demo_again- hiinrbwwbmyfbrbctsfdzvudkkuy/Build/Intermediates/demo again.build/Debug-iphonesimulator/demo again.build/DerivedSources/CoreDataGenerated/Model/DemoOne+CoreDataProperties.swift ': 0: note: имена файлов используются, чтобы отличать частные объявления с тем же именем Команда /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc не удалось с кодом выхода 1

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

Вот ссылка на демонстрационный проект, созданный с помощью Xcode 8.1 и показывающий эту проблему: - https://www.dropbox.com/s/xwyzhshktb2hqe7/demo2.zip?dl=0

4b9b3361

Ответ 1

Проблема происходит из-за функции Xcode автоматического создания подкласса.

Согласно Что нового в основных данных

Генерация автоматического подкласса Xcode

Xcode теперь поддерживает автоматическую генерацию подклассов NSManagedObject в инструменте моделирования. В инспекторе объектов:

  • Руководство/Нет - это значение по умолчанию и предыдущее поведение; в этом случае вы должен реализовать свой собственный подкласс или использовать NSManagedObject.
  • Категория/Расширение генерирует расширение класса в файле с именем like Classname + CoreDataGeneratedProperties. Вам необходимо объявить/реализовать основной класс (если в Obj-C, через заголовок, расширение может импортировать named ClassName.h).
  • Определение класса генерирует файлы подкласса с именем например ClassName + CoreDataClass, а также файлы, созданные для Категория /Extension.

Сгенерированные файлы помещаются в DerivedData и перестроен на первой сборке после сохранения модели. Они также индексируется по Xcode, поэтому нажатие клавиш на ссылки и быстрое открытие по имени файла работает.


Поэтому для исправления проблемы вам необходимо установить значение поля Codegen в Manual/None, как показано ниже: Core Data Codegen

Ответ 2

Вот что я сделал, чтобы исправить эту проблему,

  • Выберите объект в модели данных
  • Установите Модуль на Текущий модуль продукта
  • Оставьте Codegen определение класса, хотя Manual/None также работает
  • Выбрать редактоp > Создать подкласс NSManagedObject

Ответ 3

Может помочь кому-то, перейдите в проект, чтобы скомпилировать исходный код. Удалите дополнительную ссылку, если таковая имеется.

Ответ 4

Выберите модель данных кода, затем выберите Entity, измените значение Codegen на Manual/None.

Это будет работать.

Ответ 5

Проблема заключалась в том, что в моем проекте был второй файл с именем: "Extensions.swift".

После удаления дубликата "Extensions.swift" ошибка решена. Ваше сообщение об ошибке может отправить вам файл, который дублируется.

Ответ 6

В моем случае модель данных (например: MyCoreData.xcdatamodeld) была дважды указана в разделе Редактор → Создать подкласс NSManagedObject.... И вот почему он получал этот тип ошибок.

Что я сделал:

  • Я удалил файл MyCoreData.xcdatamodeld.
  • Создана другая модель данных в качестве примера MyCD.xcdatamodeld.
  • Проверено здесь дублируется Модели данных здесь: Редактор → Создать подкласс NSManagedObject...
  • Очистите и затем постройте два раза.

Ответ 7

Это случилось со мной, когда я скопировал и переименовал сущность. Не удалось переименовать класс, поэтому сделайте это вручную.