Запросы всех объектов нескольких типов дочерних сущностей в Core Data

Учитывая следующий надуманный пример:

Core Data entity diagram for my Awesome Pet Shop App (patent pending)

Я хотел бы запросить мои данные для всех объектов, которые являются кошками или собаками. Я хочу, чтобы результирующий набор был упорядочен по имени независимо от вида, поэтому выборка всех кошек, а затем всех собак не подойдет. Я хочу сделать это в одном запросе.

Один из способов сделать это - добавить поле petType в Pet, присвоить каждой записи значение petType, которое идентифицирует подобъект, которому она принадлежит, а затем запросить примерно так:

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Pet" 
                                          inManagedObjectContext:myMOC];
[fetchRequest setEntity:entity];

// petType values: 1 = dog, 2 = cat, 3 = goldfish. Yuk.
NSPredicate *p = [NSPredicate predicateWithFormat:@"petType = 1 OR petType = 2"]
[fetchRequest setPredicate:p];

// etc...

. Но одна мысль о том, чтобы сделать это таким образом, заставляет меня содрогаться. Есть ли способ лучше?


Обновление : Спасибо всем, кто ответил - здесь есть несколько действительно хороших, хорошо продуманных решений, и я ценю их все.

Чтобы дать этому некоторый контекст , реальная модель данных немного сложнее этой (не всегда), но она довольно хорошо организована. В свое время я разработал более чем изрядную долю схем данных, и я рад, что сущности и их отношения хорошо продуманы. Эта проблема возникла потому, что (чтобы расширить и без того шаткий надуманный пример) клиент изначально хотел:

  • вид, показывающий список всех домашних животных
  • вид, показывающий список золотых рыбок
  • вид, показывающий список кошки
  • вид, показывающий список собак

Пока все хорошо. Но им также нужно представление, показывающее объединенный список всех кошек и собак, «потому что маленькие девочки любят кошек и собак». (Первоначально по той же причине это были кошки и золотые рыбки.) На самом деле нет способа естественным образом сгруппировать это подмножество конкретных объектов; это действительно довольно произвольно.

Пока что подход Дэйва Дрибина к «абстрактной промежуточной сущности» кажется самым чистым решением, хотя в моем случае я думаю, что он выглядел бы несколько искусственным; на самом деле единственный способ правдиво обозначить промежуточную сущность - это «ThingLittleGirlsLike»! :)

8
задан Simon Whitaker 30 June 2011 в 16:47
поделиться