Может ли 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
.
Ответы
Ответ 1
Да, он встроен. Вам не нужно делать это вручную. Вам даже не нужно вводить запись type
самостоятельно.
В Objective-C существует понятие суперкласса/подкласса.
Соответственно, в Core Data существует понятие родительского объекта/дочернего объекта. Это может быть указано в файле модели.
В модуле Core Data создайте два объекта Circle
и Square
путем наследования вашего объекта Item
. Вы можете указать parent
объекта в моделере. Затем в моделере укажите пользовательский класс Circle
для вашей сущности Circle
, класс Square
для объекта Square
.
Затем, когда вы извлекаете управляемый объект из базы данных, правильный класс автоматически назначается.
Прочитайте documentation модельера.
Опять же, все может быть сделано в моделере, без вашего письма.