Основная фильтрация данных по нескольким объектам - PullRequest
0 голосов
/ 05 сентября 2011

Предположим, у нас есть объект с именем «Документ», а другой - с именем «Пользователь». Существует отношение «многие ко многим», поэтому пользователь может иметь набор документов, и каждый документ может принадлежать нескольким пользователям. Другие документы имеют атрибут «тип».

Теперь я хочу получить все документы для пользователя x с типом "pdf". Как бы вы получили доступ к этим данным?

Насколько я вижу, есть два пути:

  1. Получить все документы от пользователя по его взаимосвязи (user.documents) и отфильтровать массив с помощью NSPredicate (это работает со сложным объектом?).

  2. Выполнить запрос выборки для объекта «Документы» с двумя предикатами. Первый указывает на пользователя, а второй отвечает за тип.

Какой подход лучше? Или есть даже лучший способ добиться этого? Я думаю, что второе решение намного дороже.

Ответы [ 3 ]

3 голосов
/ 05 сентября 2011

Субъектом вашего запроса должен быть Document, и вам нужно использовать ЛЮБУЮ операцию в вашем предикате:

[NSPredicate predicateWithFormat: @"ANY users == %@ AND type == %@", userX, @"PDF"];

См. Раздел по Совокупные операции :

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Predicates/Articles/pSyntax.html

0 голосов
/ 21 ноября 2012

Найден лучший способ

NSPredicate *compoundPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:[NSArray of Predicates]];

Вы также можете использовать notPredicateWithSubpredicates и orPredicateWithSubpredicates в зависимости от ваших потребностей.

Ссылка на документацию http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSCompoundPredicate_Class/Reference/Reference.html

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

Я использовал Базовые данные более одного года, но я только начал использовать отношения и другие расширенные функции ...
Однако, по моему мнению, вы можете попробовать использовать первый способ и ответитьна ваш вопрос, я советую вам внимательно прочитать Руководство по программированию предикатов

...