CoreData:如何动态处理继承?

时间:2011-09-28 15:13:57

标签: inheritance core-data

例如,我的CoreData项目中有三个类:Person,Pupil和Teacher。学生和老师将人作为父母班。

现在,我想做类似的事情:

Person *person;

if (createPupil) {
    person = [[Pupil alloc] init];
    ...
} else {
    person = [[Teacher alloc] init];
    ...
}

[self.managedObjectContext save:&error];

但似乎它始终保存在Person-table中。当我试图取小学生或老师时,他们都是空的。是否有可能使这种动态变化?

非常感谢,

的Stefan

1 个答案:

答案 0 :(得分:1)

您的if语句已经引入了动态元素。我就是这样做的:

if (createPupil) {
   Pupil *person = [NSEntityDescription 
      insertNewObjectForEntityForName:"Pupil"
      inManagedObjectContext:self.managedObjectContext];
   // ... configure
} 
else {
   Teacher *person = [NSEntityDescription 
      insertNewObjectForEntityForName:"Teacher"
      inManagedObjectContext:self.managedObjectContext];
   // ... configure

}

[self.managedObjectContext save:&error];

另请查看Apple insertNewObjectForEntityForName: inManagedObjectContext: documentation中的评论。

  

该方法在Mac OS X v10.4上特别有用,因为您可以使用它   创建一个新的托管对象,而不必知道使用的类   代表实体。这在早期特别有益   类和类名易失时的开发生命周期。