Подтвердить что ты не робот

Может ли CoreData обрабатывать полиморфные подклассы?

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

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

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

@interface Circle : Item
@end

@interface Square : Item
@end

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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