【问题标题】:Parent-Child Hierarchy in NSManagedObject CoreDataNSManagedObject CoreData 中的父子层次结构
【发布时间】:2014-11-06 05:06:56
【问题描述】:

在 xcdatamodeld 文件中,我创建了一个带有 firstNamelastNameemail 字段的 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


【解决方案1】:

我怀疑初始化失败(列表中的第一个错误)是第二个错误(无法识别的选择器)的原因。

您需要使用initWithEntity:insertIntoManagedObjectContext: 而不仅仅是init。或者使用NSEntityDescription's insertNewObjectForEntityForName:inManagedObjectContext: 类方法。

【讨论】:

  • 是的。几个小时后,我意识到了这一点。这就是问题所在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多