【发布时间】:2014-11-06 05:06:56
【问题描述】:
在 xcdatamodeld 文件中,我创建了一个带有 firstName、lastName 和 email 字段的 Person 实体。然后我创建了一个 User 实体,其中包含一个额外的字段。我将Person 设置为User 的父实体。
然后我使用“编辑器”菜单中的“创建 NSManagedObject 子类...”选项并为这些实体生成类。
现在,当我执行User* user = [[User alloc] init] 时,由于某种原因,我无法访问user.firstName 或超类Person 的其他属性。它说,“在 User* 类型的对象上找不到属性 firstName”
当我检查时,生成的User 类是NSManagedObject 的子类,而不是Person。我认为这是一个问题,并将User 更改为Person 的子类。代码编译正常,但在运行时崩溃并出现此错误 --
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
我真的不知道我在这里做错了什么。我认为 Xcode 应该能够正确生成类,并且我应该能够开箱即用地使用它们。
【问题讨论】:
-
我,and others 发现在 XCode GUI 中不显示父实体很容易。只需将父实体设置为 Person 就足以访问 user.firstName。您还可以查询 user.entity.superEntity.name 或其他类似路径来检查继承。
标签: ios objective-c entity-framework core-data