Ошибка при вставке сущностей, которые расширяют абстрактную сущность - PullRequest
1 голос
/ 18 сентября 2011

У меня есть следующие объекты:

  • 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];

это работает.

Я проверил сгенерированные классы из базовых данных, и они правильно расширяют абстрактный объект. Что может быть не так?

1 Ответ

0 голосов
/ 22 сентября 2011

Нашли ошибку. Сгенерированный Pick.h имел следующее:

@class Picker
@interface Pick : NSManagedObject

@property (nonatomic, retain) NSManagedObject *game;
@property (nonatomic, retain) Picker *picker;

Изменение на:

@interface Pick : NSManagedObject

@property (nonatomic, retain) NSManagedObject *game;
@property (nonatomic, retain) NSManagedObject *picker;

заставил все работать.

Попробуйте проверить код, сгенерированный Xcode. Это случилось со мной, используя Xcode 4.2.

...