РЕДАКТИРОВАТЬ:
Я связался с Apple, и они предоставили решение:
Когда создается проект Xcode «xxx» с включенной опцией coreData, ядроФайл модели данных «xxx.xcdatamodeld» создается и добавляется к целевым источникам компиляции этапов сборки.
Скажем, каждый добавляет туда сущность «Сущность» с атрибутом «атрибут».
Если в навигаторе проекта Xcode выбрать этот файл модели и открыть инспектор файлов, появляется запись «Генерация кода», которая по умолчанию установлена в Swift.При этом автоматически создаются 2 файла Entity + CoreDataClass.swift и Entity + CoreDataProperties.swift, но они не отображаются в навигаторе проекта.
Сборка проекта завершается успешно, и можно использовать свойство Entity.attribute, как обычно в коде.,
Однако:
Если в навигаторе Xcode выбрать файл xcdatamodeld, в меню редактора Xcode есть пункт «Создать подкласс NSManagedObject…».Если выбрать эту запись и указать модель данных xxx, 2 файла Entity + CoreDataClass.swift и Entity + CoreDataProperties.swift будут созданы снова и показаны в навигаторе проекта и добавлены по умолчанию к цели.
Это означает, что эти файлы добавляются дважды, поэтому появляются предупреждения.
Так что решение состоит в том, чтобы не использовать эту команду редактора , и я не знаю, для чего она нужна ...
РЕДАКТИРОВАТЬ 2:
Моя вина;Я искал не в том месте:
- Откройте xcdatamodeld в навигаторе проекта.
- В правой части панели выберите объект.
- В правом верхнем углу откройте панель инспектора.
- В правом верхнем углу выберите инспектор модели данных.
- Существует запись «Codegen», в которой можно выбрать Manual / None.
Если выбрана эта опция, из xcdatamodeld автоматически не генерируется код, т. Е. Можно вручную (с помощью команды редактора) создать подклассы NSManagedObject, которые можно добавить в целевой раздел источников компиляции, кактребуется.
Предыдущий ответ:
Очевидно, что есть два способа использования CoreData, либо 1), используя только файл PROJECT.xcdatamodeld
, который затем добавляется в Скомпилируйте источники Фаза сборки или 2) путем создания подкласса NSManagedObject
с помощью команды Xcode Editor / Create NSManagedObject Subclass .
Если используется 1), все работает нормально, но никто не имеет доступа к свойству.
Если используется 2), Xcode создает 2 файла ENTITY+CoreDataClass.swift
и ENTITY+CoreDataProperties.swift
.Эти 2 файла добавляются в этап сборки исходных текстов , , но PROJECT.xcdatamodeld
не должен .Если кто-то все равно это делает, он получает ошибку сборки «неожиданное дублирование задачи».Но если это не так, проект создается без ошибок и предупреждений.
Однако при запуске инструкция
let entity = NSEntityDescription.entity(forEntityName: "MyEntity", in: managedContext)!
не выполняется, поскольку не находит модель данных.
Обходной путьдобавить PROJECT.xcdatamodeld
к target / Build Phases / Copy Bundle Resources .Затем код выполняется нормально, но вы получите предупреждения, которые я описал в своем вопросе.