Ios NSManagedObject CoreData中的父子层次结构
在xcdatamodeld文件中,我创建了一个Ios NSManagedObject CoreData中的父子层次结构,ios,objective-c,entity-framework,core-data,Ios,Objective C,Entity Framework,Core Data,在xcdatamodeld文件中,我创建了一个Person实体,其中包含firstName、lastName和email字段。然后我创建了一个User实体,其中有一个额外的字段。我将Person设置为User的父实体 然后我使用“编辑器”菜单中的“创建NSManagedObject子类…”选项并为这些实体生成类 现在,当我执行User*User=[[User alloc]init]时,由于某种原因,我无法访问User.firstName或超类Person的其他属性。它说,“在User*类型的对象
Person
实体,其中包含firstName
、lastName
和email
字段。然后我创建了一个User
实体,其中有一个额外的字段。我将Person
设置为User
的父实体
然后我使用“编辑器”菜单中的“创建NSManagedObject子类…”选项并为这些实体生成类
现在,当我执行User*User=[[User alloc]init]
时,由于某种原因,我无法访问User.firstName
或超类Person
的其他属性。它说,“在User*类型的对象上找不到属性firstName”
当我检查时,生成的User
类是NSManagedObject
的子类,而不是Person
。我认为这是个问题,并将User
更改为Person
的子类。代码编译得很好,但在运行时由于以下错误崩溃--
我真的不知道我做错了什么。我认为Xcode应该正确地生成类,我应该能够直接使用它们 我怀疑初始化失败(列表中的第一个错误)是第二个错误(无法识别的选择器)的原因 您需要使用
initWithEntity:insertIntoManagedObjectContext:
而不仅仅是init
。或者使用n实体描述
insertNewObjectForEntityForName:inManagedObjectContext:
class方法。I发现很容易不让父实体粘在XCode GUI中。仅将父实体设置为Person就足以访问user.firstName。您还可以查询user.entity.superEntity.name或其他类似路径以检查继承。是。几小时后我意识到了这一点。这就是问题所在。
2014-11-05 20:24:14.142 MyApp[15131:3332646] CoreData: error: Failed to call designated initializer on NSManagedObject class 'User'
2014-11-05 20:24:14.142 MyApp[15131:3332646] -[User setFirstName:]: unrecognized selector sent to instance 0x7fee5a436b90