'为CoreData实体创建NSManagedObject子类后的错误

inf*_*ouk 19 core-data swift

我创建了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)

}
Run Code Online (Sandbox Code Playgroud)

错误是:

Command/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc失败,退出代码为1

"UserRoutine"的重新声明无效'UserExercise'对于此上下文中的类型查找不明确@NSManaged仅允许在实例属性或方法上使用

有太多不能列出其基本上这些重复的一遍又一遍

Nik*_*und 19

默认情况下,Xcode会为您管理这些子类的生成.如果您想自己管理它们的生成,那么:

  1. 在数据模型中选择您的实体.
  2. 在实用程序窗格(右窗格)中找到Codegen并将其设置为Manual/None.
  3. 清洁和建造.


fja*_*fja 15

Xcode中的当前默认值是在/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目录中为您自动创建NSManagedObject的子类; DerivedData目录是Xcode保存自动生成的代码的地方.您通过编辑>创建NSManagedObject子类来重新声明相同的子类...这就是您收到"Invalid redeclaration of 'UserRoutine' 'UserExercise' is ambiguous for type lookup in this context @NSManaged only allowed on an instance property or method"错误的原因.要解决错误并手动创建NSManagedObjects的子类,您需要做的是:

  1. 打开终端并导航到 /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

  2. 运行此命令:( rm -rf *现在要小心这个命令,只有当你到达生成代码所在的最终目录时运行它,否则你将打破你的项目)

  3. 删除当前的数据模型

  4. 创建一个新的数据模型

  5. 选择新数据模型的实体(对数据模型中的每个实体执行此操作)并转到其属性检查器,并Manual/None 创建新数据模型后将其Codegen设置为第一次运行之前.

  6. 通过转到Editor> Create NSManagedObject Subclass创建NSManagedObject的子类...

你的错误应该消失.

希望这有帮助!


Amm*_*mad 7

一个对我有用的简单方法....您可以通过选择一个实体并单击右上角的数据模型检查器来找到它们.为所有实体执行此操作对于
FIRST将模块设置为"当前产品模块"并将Codegen设置为"手动/无"非常重要

只有这样,SECOND:编辑器 - >创建NSManagedObject子类.