Xcode-бета 8. Невозможно создать основные данные

Я пытаюсь добавить основные данные. И каждый раз, когда я получал такую ​​же ошибку:

error: filename "EntityName +CoreDataClass.swift" used twice: '/Users/userName/Desktop/Development/MyApp/AppName/EntityName +CoreDataClass.swift' and '/Users/userName/Library/Developer/Xcode/DerivedData/AppName-dgwzrmxsetzvtedibxrazuutjwnh/Build/Intermediates/AppName.build/Debug-iphoneos/AppName.build/DerivedSources/CoreDataGenerated/Model/EntityName +CoreDataClass.swift' 

Я добавляю основные данные, используя следующие шаги:
1.Новый файл / DataModel; сохраните его в корневом каталоге моего проекта
выберите Model.xcdatamodeld и добавьте объект, добавьте несколько атрибутов, сохраните, создайте / создайте подкласс NSManagedObjectClass.

В результате я наблюдаю 4 новых файла в навигаторе: Model.xcdatamodeld, EntityName + CoreDataProperties.swift, EntityName + CoreDataClass.swift, _COREDATA_DATAMODELNAME_ + CoreDataModel.swift

их содержание: _COREDATA_DATAMODELNAME_ + CoreDataModel.swift:

 import Foundation import CoreData ___COREDATA_DATAMODEL_MANAGEDOBJECTCLASSES_IMPLEMENTATIONS___ 

EntityName + CoreDataClass.swift:

 import Foundation import CoreData class EntityName: NSManagedObject { } 

EntityName + CoreDataProperties.swift:

 import Foundation import CoreData extension EntityName { @nonobjc class func fetchRequest() -> NSFetchRequest< EntityName > { return NSFetchRequest< EntityName >(entityName: "EntityName"); } @NSManaged var str: String? } 

То, что я пробовал:
1. Очистить сборку, удалить DerivedData, удалить содержимое var / folders, перезапустить
2. Удаление сгенерированных файлов, отображаемых в навигаторе.

Все мои усилия были неудачными.
Что я делаю неправильно?

Xcode 8 включает автоматическое генерирование класса NSManagedObject когда файл модели использует формат файла Xcode 8. Если вы создаете свои собственные файлы подкласса, вы создаете дубликаты. Второй файл в сообщении об ошибке в DerivedSources – это тот, который Xcode создается автоматически.

Если автоматически созданные файлы делают то, что вам нужно, просто перестаньте создавать свои собственные, и все будет в порядке.

Если вы хотите создать свои собственные подклассы, вы можете либо

  • Установите «версию инструментов» для файла модели как Xcode 7.3 или ранее, чтобы отключить все генерирование кода (это, похоже, не изменяет ничего значимого в отношении фактического содержимого файла), или
  • Отключите автоматическую генерацию для каждого объекта отдельно, установив для параметра «Codegen» значение «Ручной / Нет» для объекта.

В XCode 8 есть две ошибки:

1 – Если вы измените выпадающее меню Codegen, новое значение не будет сохранено в Model.xcdatamodel. Вы должны изменить что-то еще, чтобы сохранить его. Например, измените имя класса; строить; измените имя класса назад; строить снова.

2 – Сгенерированный код помещается в DerivedData в папку Intermediates, но это происходит только в том случае, если папка еще не существует. Обходной путь состоит в том, чтобы сделать чистую, а затем сборку.

На самом деле у меня такая же проблема (с использованием Swift), и я подозреваю, что это ошибка. Если я правильно понимаю, то OP использует поднаборы NorganagedObject, созданные в Xcode, и впоследствии не создает дополнительные (лишние) подклассы, которые, по-видимому, являются источником некоторой путаницы.

Действия по воспроизведению:

  1. Создайте новый проект, приложение с одним представлением. Отметьте «Использовать основные данные»

  2. Создайте сущность в объекте модели, добавьте свойства, убедитесь, что файл сохранен (иногда Xcode 8 Beta выдает данные, если они явно не сохранены)

  3. Выбрать редактор -> Созданный подкласс NSManagedObject. Отметьте соответствующие поля

Xcode создает 3 файла:

  1. COREDATA_DATAMODELNAME_ + CoreDataModel.swift. Этот файл поврежден и содержит недопустимые записи следующих операторов для импорта Foundation и CoreData – проект не будет компилироваться, если этот файл не будет удален

     import Foundation import CoreData ___COREDATA_DATAMODEL_MANAGEDOBJECTCLASSES_IMPLEMENTATIONS___ 
  2. EntityName + CoreDataClass.swift

  3. EntityName + CoreDataProperties.swift

Хотя редактор не отмечает никаких ошибок на этом этапе, попытки скомпилировать сбой по причинам, указанным OP (а именно, отсутствующие файлы с одинаковыми именами, но с префиксом «.» В папке DerivedData)

Если вы создаете подклассы NSManagedObject вручную после создания вашей модели без использования явно искаженного автогенератора Xcode, проблем нет. Немного больше набрав, но намного надежнее! Однако вам нужно будет начать с «чистого» проекта (т. Е. До того, как вы попытаетесь автоматически сгенерировать подклассы), в противном случае ошибка будет сохраняться. Очистка полученных данных не поможет печально.

***** ОБНОВЛЕНО ***** Кажется, что происходит что-то довольно странное, и, как представляется, изначально предлагается (например, извинения) создание беззвучного кода, но это очень отличается от того, чего можно было бы ожидать. Кроме того, этот код не отображается в редакторе (что кажется немного бессмысленным, а также запутанным). Он создается в подпапках DerivedData> Build> Intermediates> .Build.

Я могу полностью понять, почему OP был смущен (как и я!). То, что стоит эта «функция», несомненно, является попыткой быть полезной, но несколько запутанной, если вы привыкли к предыдущему поведению, и вам предлагается возможность генерировать видимый и редактируемый дубликат из главного меню.

Итак, выберите «Manual / None» в окне Codegen (показано ниже), а затем вы можете использовать опцию автогенера в строке меню (после удаления «мусора») или написать свой собственный код.

Новый вариант кода XCode 8

Следуй этим шагам,

  1. Отключите автоматическую генерацию для каждого объекта отдельно, установив для параметра «Codegen» значение «Ручной / Нет» для объекта.

  2. Измените имя объекта на другое, чтобы сохранить его. Например, измените имя класса; строить; измените имя класса назад; строить снова.

Я получил эту ошибку,

просто измените версию инструмента на Xcode 7.3 в вашем файле .xcdatamodeld

и он отлично работает!

Для всех, у кого возникли проблемы с работой автогена:

Мне пришлось установить «com.apple.syncservices.Syncable» в «NO» в настройках пользовательской информации для Entity.

Может быть, это помогает.

Том Харрингтон: Правильно. Тем не менее, есть способ добавить свои собственные функции и / или vars, не выполняя ни одного из двух указанных вариантов.

Просто создайте расширение для класса . (убедитесь, что вы назвали swift-файл чем-то отличным от стандартных файлов сгенерированных NSManagesObject.)

Например. Если у вас есть объект под названием MyEntity вы можете добавить быстрый файл MyEntityExtension.swift который может выглядеть примерно так:

 import Foundation import CoreData import UIKit extension MyEntity { var color: UIColor { get { return self.colorValue as! UIColor } set { if newValue.isMember(of: UIColor.self) { self.colorValue = newValue } } } } 

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

  • Тип «Любой» Не имеет подстрочных членов в xcode 8 Swift 3
  • Храните единый раскадровки для iPhone и iPad
  • Как скомпилировать раскадровку на детской площадке
  • Правильный способ отладки собственного проекта фреймворка из основного проекта приложения в Xcode 8?
  • Несогласованные представления в Interface Builder в XCode 8.3
  • Связывание с встроенной платформой из расширения приложения
  • Отладчик Xcode 8 не печатает объекты и показывает выраженную ошибку
  • Xcode8 раскадровки, как установить только один контроллер вида в ландшафте?
  • Что может привести к сбоям, вызванным защитой кода?
  • Xcode 8 заменяет colorSpace в файлах раскадровки
  • iOS10 + Градиентная остановка
  • Давайте будем гением компьютера.