У меня есть объект A, подобный следующему:

@interface A : NSManagedObject
{
}

@property (nonatomic, retain) NSString *stringProperty;

У которого есть подобие B:

@interface B : A
{
}

Я хотел бы выполнить выборку на B, используя свойство, хранящееся в A. Примерно так:

NSManagedObjectContext *context = [delegate mainManagedObjectContext];
NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"B"     inManagedObjectContext:context];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entityDescription];
NSPredicate *pred = [NSPredicate predicateWithFormat:@"stringProperty = %@", someString];
[request setPredicate:pred];

Это возможно? В настоящее время я получаю следующую ошибку:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'keypath stringProperty not found in entity <NSSQLEntity B id=26>'
1
cmour 10 Фев 2011 в 20:26
Можете ли вы немного подробнее описать свою иерархию сущностей и показать фактический предикат, который вы используете?
 – 
Dave DeLong
23 Фев 2011 в 23:04
Я обновил свой вопрос, добавив более конкретные фрагменты кода.
 – 
cmour
25 Фев 2011 в 01:40

2 ответа

Лучший ответ

Я только что попробовал аналогичный пример в последней версии SDK (4.3), и теперь он работает. Теперь я могу использовать свойства родительских сущностей в предикате для подчиненной сущности.

0
cmour 30 Июл 2011 в 08:16

Вам нужно позвонить superentity? т.е.

[NSPredicate predicateWithFormat:@"superentity.stringProperty = %@", someString];

Или вы можете получить объект A и setIncludesSubentitles:YES для своего запроса на выборку.

0
Dan 29 Мар 2011 в 16:05
Спасибо за ваш ответ. Там, где так долго никто не отвечал, я пошел дальше и, насколько я помню, просто изменил свою иерархию. Когда у меня будет время, я опробую ваше решение и приму ваш ответ соответственно.
 – 
cmour
1 Апр 2011 в 18:28
Я попытался использовать superentity.stringProperty и получил следующую ошибку: Завершение работы приложения из-за неперехваченного исключения 'NSInvalidArgumentException', причина: 'keypath superentity.stringProperty не найден в объекте
 – 
cmour
29 Июл 2011 в 19:11
Кроме того, setIncludesSubentities: YES не подходит, потому что мне нужны только объекты B.
 – 
cmour
29 Июл 2011 в 19:15