Ошибки после "Создать подкласс NSManagedObject для объектов CoreData

Я создал 2 основных объекта данных, а затем создал подклассы NSManagedObject для них из меню редактора.

Однако, когда я запускаю свое приложение, по какой-то причине я получаю ошибки в каждой строке всех файлов.

Вот пример, эти ошибки одинаковы для обоих созданных файлов.

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

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

    import Foundation
import CoreData


extension UserExercise {

    @nonobjc public class func fetchRequest() -> NSFetchRequest<UserExercise> {
        return NSFetchRequest<UserExercise>(entityName: "UserExercise");
    }

    @NSManaged public var id: Int16
    @NSManaged public var name: String?
    @NSManaged public var reps: Int16
    @NSManaged public var sets: Int16
    @NSManaged public var weight: Int16
    @NSManaged public var relationship: NSSet?

}

// MARK: Generated accessors for relationship
extension UserExercise {

    @objc(addRelationshipObject:)
    @NSManaged public func addToRelationship(_ value: UserRoutine)

    @objc(removeRelationshipObject:)
    @NSManaged public func removeFromRelationship(_ value: UserRoutine)

    @objc(addRelationship:)
    @NSManaged public func addToRelationship(_ values: NSSet)

    @objc(removeRelationship:)
    @NSManaged public func removeFromRelationship(_ values: NSSet)

}

Ошибки:

Команда/Приложения/Xcode.app/Содержание/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc не удалось с кодом выхода 1

Недействительная декларация 'UserRoutine' "UserExercise" неоднозначно для поиска типов в этом контексте @NSManaged разрешено только для свойства экземпляра или метода

Theres слишком много, чтобы перечислить его в основном эти повторяющиеся снова и снова

Ответ 1

Текущее значение по умолчанию в Xcode - это автоматическое создание подклассов NSManagedObject для вас в каталоге /Users/<your user name>/Library/Developer/Xcode/DerivedData/AppName-agkwmibzbo‌​pevjgfajlcbyixzyev/B‌​uild/Intermediates/A‌​ppName.build/Debug-i‌​phonesimulator/AppNa‌​me.build/DerivedSour‌​ces/CoreDataGenerate‌​d/Model; Каталог DerivedData - это где Xcode сохраняет автоматически сгенерированный код. Вы обновляете один и тот же подкласс, создавая редактоp > Create NSManagedObject Subclass... поэтому вы получаете ошибку "Invalid redeclaration of 'UserRoutine' 'UserExercise' is ambiguous for type lookup in this context @NSManaged only allowed on an instance property or method". Чтобы устранить ошибки и вручную создать подкласс NSManagedObjects, вам нужно сделать следующее:

  • Откройте терминал и перейдите к /Users/<your user name>/Library/Developer/Xcode/DerivedData/AppName-agkwmibzbo‌​pevjgfajlcbyixzyev/B‌​uild/Intermediates/A‌​ppName.build/Debug-i‌​phonesimulator/AppNa‌​me.build/DerivedSour‌​ces/CoreDataGenerate‌​d/Model

  • Запустите эту команду: rm -rf * (теперь будьте осторожны с этой командой, запустите ее только тогда, когда вы попадете в конечный каталог, где созданы сгенерированные коды, или вы разорвите ваш проект навсегда)

  • Удалить текущую модель данных

  • Создать новую модель данных

  • Выберите новый объект модели данных (сделайте это для каждого объекта в модели данных) и перейдите к его инспектору атрибутов и установите его Codegen на Manual/None До первый запуск после вас создали новую модель данных.

  • Создайте подкласс NSManagedObject, перейдя в редактоp > Создать подкласс NSManagedObject...

Ваши ошибки должны исчезнуть.

Надеюсь, это помогло!

Ответ 2

Xcode по умолчанию управляет генерацией этих подклассов для вас. Если вы хотите самостоятельно управлять их созданием, выполните следующие действия:

  • Выберите объекты в модели данных.
  • Найти Codegen в панели утилит (правая панель) и установить его в ручном/Нет.
  • Очистить и построить.

Ответ 3

Простой подход, который работал у меня.... Вы можете найти их, выбрав объект и нажав на Data Model Inspector в правом верхнем углу. Сделайте это для всех ваших сущностей
Его важный для FIRST установленный модуль для "Current Product Module" и Codegen для "Manual/None"

Только тогда, SECOND: Editor → Создать подкласс NSManagedObject.

Ответ 4

Это для Swift 3.0 и Xcode 8.2.1 (8C1002)

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

Найдите все ваши сгенерированные файлы из xcdatamodeld, внутри вашего навигатора проектов. Удалите все файлы и убедитесь, что вы переместились в корзину, не удаляйте ссылки, иначе вам придется вручную удалять файлы из:

/Users//Library/Developer/Xcode/DerivedData/AppName-agkwmibzbo pevjgfajlcbyixzyev/B uild/полупродукты/A ppName.build/Debug-i phonesimulator/AppNa me.build/DerivedSour КЕС /CoreDataGenerate D/Модель

Итак, после того, как вы удалили файлы, откройте свой xcdatamodeld, выберите все свои сущности и на панели "Утилиты" выберите кнопку "Модель данных" и убедитесь, что Codegen установлен на "Manual/None".

Выберите свой xcdatamodeld и убедитесь, что для этого Codegen установлено значение "Manual/None"

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

Это сработало для меня, и оно должно работать и на вас.

Я надеюсь, что помог вам.

Ответ 5

Я также столкнулся с этой ошибкой. Я исправил его, удалив старые сгенерированные подклассы сущностей и снова создав его, и для группы я выбрал рабочую область вместо проекта или папки в проекте, а подклассы были сохранены над файлом проекта. Это выглядит странно, но проблема была решена. Также, если я перемещаю файлы в папку внутри проекта, появляется ошибка. введите описание изображения здесь