2014-11-06 49 views
0

在xcdatamodeld文件中,我创建了一个Person实体,其中firstName,lastNameemail字段。然后我创建了一个User实体,其中有一个额外的字段。我将Person设置为User的母公司。NSManagedObject CoreData中的父子层次

然后,我使用'创建NSManagedObject子类...'选项从'编辑'菜单,并为这些实体生成类。

现在当我做了User* user = [[User alloc] init]时,出于某种原因,我无法访问user.firstName或超类Person的其他属性。它说,

当我检查时,产生User类是的NSManagedObject而不是Person子类“属性的firstName是不是类型的用户*的对象发现”。我认为这是一个问题,并将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应该正确地生成类,我应该能够使用它们开箱即用。

+0

我,[和其他人](http://stackoverflow.com/questions/25703485/coredata-abstract-entity-with-relationship/)发现它很容易在XCode GUI中没有父母实体。简单地将父实体设置为Person应该足以访问user.firstName。您还可以查询user.entity.superEntity.name或其他此类路径来检查继承。 – stevesliva 2014-11-06 05:18:00

回答

2

我怀疑失败的初始化(列表中的第一个错误)是第二个错误(无法识别的选择器)的原因。您需要使用initWithEntity:insertIntoManagedObjectContext:而不仅仅是init。或者使用NSEntityDescriptioninsertNewObjectForEntityForName:inManagedObjectContext:类方法。

+0

是的。几个小时后,我意识到。这是问题所在。 – 2014-11-06 18:02:15