Может ли CoreData обрабатывать полиморфные подклассы? - PullRequest
19 голосов
/ 30 сентября 2010

У меня есть модель CoreData (управляемый объект) с именем Item:

@interface Item :  NSManagedObject {
  NSString * type;
}
@property (retain) NSString * type;
@end

У меня также есть два подкласса Item:

@interface Circle : Item
@end

@interface Square : Item
@end

Я отслеживаю подкласс элемента с помощьюtype property.

Когда я получаю Items, я получаю обратно массив Items.Но я хочу иметь возможность динамически настраивать тип элементов в соответствии с их type.

Поддерживает ли CoreData это изначально?Если нет, есть ли способ динамически типизировать каждый Item?

Я могу получить класс, который хочу разыграть Item, например:

Item * item = ...;
id klass = NSClassFromString(item.type);

Я просто надеваюне знаю, как я могу разыграть item как тип klass.

1 Ответ

28 голосов
/ 30 сентября 2010

Да, он встроен. Вам не нужно делать это вручную.Вам даже не нужно помещать запись type самостоятельно.

В Objective-C есть концепция суперкласса / подкласса.Соответственно, в Core Data есть концепция родительского объекта / дочернего объекта.Это можно указать в файле модели.

В моделировщике базовых данных создайте две сущности Circle и Square, унаследовав вашу сущность Item.Вы можете указать parent объекта в моделировщике.Затем в программе моделирования укажите пользовательский класс Circle для вашей сущности Circle, класс Square для сущности Square.

Затем при извлечении управляемого объекта из базы данных автоматически назначается правильный класс.Прочитайте документацию моделера.

Опять же, все можно сделать в моделере, без написания чего-либо.

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