Ошибки после "Создать подкласс 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-agkwmibzbopevjgfajlcbyixzyev/Build/Intermediates/AppName.build/Debug-iphonesimulator/AppName.build/DerivedSources/CoreDataGenerated/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-agkwmibzbopevjgfajlcbyixzyev/Build/Intermediates/AppName.build/Debug-iphonesimulator/AppName.build/DerivedSources/CoreDataGenerated/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
Я также столкнулся с этой ошибкой. Я исправил его, удалив старые сгенерированные подклассы сущностей и снова создав его, и для группы я выбрал рабочую область вместо проекта или папки в проекте, а подклассы были сохранены над файлом проекта. Это выглядит странно, но проблема была решена. Также, если я перемещаю файлы в папку внутри проекта, появляется ошибка. ![введите описание изображения здесь]()