CoreData: как динамически обрабатывать наследование? - PullRequest
0 голосов
/ 28 сентября 2011

Например, у меня есть три класса в моем проекте CoreData: Человек, Ученик и Учитель.Ученик и Учитель имеют Person в качестве родительского класса.

Теперь я хотел бы сделать что-то вроде:

Person *person;

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

[self.managedObjectContext save:&error];

Но кажется, что его всегда сохраняют в таблице Person.Когда я пытаюсь вызвать учеников или учителей, они пусты.Есть ли возможность сделать это динамическим?

Большое спасибо,

Stefan

1 Ответ

1 голос
/ 28 сентября 2011

Ваши операторы 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: документации .

Этот метод особенно полезен в Mac OS X v10.4, так как вы можете использовать его создать новый управляемый объект без знания используемого класса представлять сущность. Это особенно полезно в начале жизненный цикл разработки, когда классы и имена классов изменчивы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...