Создание подкласса NSManagedObject с помощью swift 3 и Xcode 8 beta

Я начал пробовать использовать данные Core с бета-версией swift 3 и Xcode 8. Когда я пытаюсь сгенерировать подклассы NSManagedObject из базовой модели данных и опцию Create NSManagedObject subclass… в меню Editor, бета-версия Xcode 8 генерирует три файла, один из них - _COREDATA_DATAMODELNAME_ + CoreDataModel.swift со следующим содержимым:

import Foundation
import CoreData

___COREDATA_DATAMODEL_MANAGEDOBJECTCLASSES_IMPLEMENTATIONS___

Кроме того, в содержимом этого файла отображаются два предупреждения:

Expressions are not allowed at the top level.
Use of unresolved identifier '___COREDATA_DATAMODEL_MANAGEDOBJECTCLASSES_IMPLEMENTATIONS___'

Кто-нибудь сталкивался с такой же проблемой? В чем смысл этого нового файла?

Спасибо


person RFG    schedule 19.06.2016    source источник
comment
Я не могу создать собственные подклассы NSManagedObject в бета-версии Xcode 8. У меня такая же проблема.   -  person Amateur User    schedule 21.07.2016
comment
Я исправил эту почти проблему для objc следующим образом: stackoverflow.com/a/40788081/2246798   -  person souvickcse    schedule 28.11.2016


Ответы (3)


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

Из документации (что нового в Core Data)

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

Xcode теперь поддерживает автоматическое создание NSManagedObject подклассов в инструменте моделирования. В инспекторе сущностей:

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

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

person vadian    schedule 19.06.2016
comment
Спасибо. Я попробую эти три варианта, пока буду ждать новых выпусков Xcode 8. - person RFG; 19.06.2016
comment
ПРИМЕЧАНИЕ. Вы также можете выбрать язык кодеина в инспекторе файлов, если, как я, вы хотите сгенерировать в Swift. По какой-то причине я был Objective C, несмотря на создание проекта Swift ... Опять же, это бета-версия миграции проекта GM. - person Adam Carter; 16.09.2016
comment
что за инспектор сущностей? - нашел ответ: здесь вы редактируете свою сущность, файл .xcdatamodel - person Ronen; 06.10.2016

У меня есть аналогичные проблемы с этой бета-версией Xcode 8 для разработчиков. Некоторые из них разрешили Command + S (сохранить изменения) до того, как я покину модель данных или до того, как я сгенерирую подклассы NSManagedObject. Не знаю почему, но в моем случае автоматическое сохранение иногда не срабатывало, и возникали ошибки.

person Adam Smaka    schedule 28.06.2016

Я столкнулся с проблемой с файлом .swift, процитированным выше, и обнаружил, что комментирование строки ___ COREDATA ... на данный момент вызвало ошибку. Я не уверен, чего он должен достичь.

Я также обнаружил, что XCODE 8 имеет тенденцию забывать о новых полях, которые добавляются к объектам CoreData, и многократно сбрасывать цель генерации кода модели CoreData на цель C, что приводит к потоку файлов .h и .m вместо быстрого files, когда он восстанавливает файлы. Большинство проблем, которые я видел, были связаны с CoreData, но до сих пор их можно было решить.

Помимо этого, XCODE 8 на удивление надежно работал с приложением с 25 объектами данных и более 30 контроллерами представления, поэтому я не жалуюсь.

person Ron Diel    schedule 28.06.2016