Как использовать NSPredicate для отлова дочерних объектов? - PullRequest
7 голосов
/ 11 марта 2010

Я новичок в основных данных и пытаюсь получить все дочерние объекты различных типов одним запросом. Скажем, есть тип «Животное» как родитель, а «Кошка», «Собака» и «Птица» как дети. Я хотел бы получить и кошек, и собак, но не Птицы в одном запросе, возвращаемые как объекты животных. Является ли это возможным?

Ответы [ 3 ]

5 голосов
/ 13 марта 2010

Управляемые объекты имеют свойство entity , поэтому вы должны иметь возможность объединить решение Кевина Сильвестра с предикатом из entity.name != "Bird".

3 голосов
/ 11 марта 2010

Да, это возможно:

// Load delegate from application and context from delegate.
SampleAppDelegate *delegate = [[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context = delegate.managedObjectContext;

// Create new request.
NSFetchRequest *request = [[NSFetchRequest alloc] init];

// Create entity description using delegate object context.
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Animal" inManagedObjectContext:context];

// Set entity for request.
[request setEntity:entity];
[request setIncludesSubentities:YES];

// Load array of documents.
NSError *error;
NSArray *animals = [context executeFetchRequest:request error:&error];

// Release request.
[request release];

// Access array.
for (id animal in animals) { }
0 голосов
/ 16 марта 2010

Хотя это (entity.name != "Bird") может работать, если у вас есть только «Кошка», «Собака» и «Птица», оно не будет работать, если позже вы добавите больше «Животных». Вы также можете использовать entity.name == "Dog" && entity.name == "Cat"

Это случай "... у вас когда-нибудь будут другие животные, в вашем случае?"

Веселись =)

...