У меня есть следующие объекты:
User
. Общая сущность пользователя с именем пользователя, почтой и т. Д.
ComputerUserWithAI
. Похож на пользователя, но управляется приложением.
Pick
. Содержит отношение к Game
и должно содержать сборщик.
Поскольку Picker
может быть User
или ComputerUserWithAI
, я создал Abstract Entity
с именем Picker
и сделал User
и ComputerWithAI
для расширения этого Picker
класса.
Как только я добавил Picker
сущность, я сделал Pick
отношение к сущности Picker
, называемой picker.
Все прошло нормально, но я не могу вставить ComputerUserWithAI
в Pick
. Мой код такой:
ComputerUserWithAI *userWithAI = [NSEntityDescription insertNewObjectForEntityForName:@"ComputerUserWithAI" inManagedObjectContext:ctx];
userWithAI.name = @"DeepBlue";
Pick *pick = [NSEntityDescription insertNewObjectForEntityForName:@"Pick" inManagedObjectContext:ctx];
pick.game = game;
pick.picker = userWithAI;
Я получаю следующую ошибку:
Завершение приложения из-за необработанного исключения
«NSInvalidArgumentException», причина: «Недопустимый тип значения для
отношение один к одному: property = "picker"; желаемый тип = сборщик; дано
type = NSManagedObject; значение = (сущность:
ComputerUserWithAI ...
Но когда я это сделаю:
pick.picker = [NSEntityDescription insertNewObjectForEntityForName:@"Picker" inManagedObjectContext:ctx];
это работает.
Я проверил сгенерированные классы из базовых данных, и они правильно расширяют абстрактный объект. Что может быть не так?