Могу ли я применить несколько предикатов к NSFetchRequest?Будет ли лучше вручную анализировать мои результаты? - PullRequest
31 голосов
/ 15 ноября 2011

Хорошо. У меня есть базовое приложение для iPad, которое запрашивает у пользователя 5 критериев поиска / фильтрации.Основываясь на этих данных, мне нужно перейти на базу данных основных данных и извлечь все управляемые объекты, которые соответствуют этим критериям.Кажется, мне нужно применить более одного предиката к одному и тому же запросу, возможно ли это?Или я мог бы просто написать очень длинный причудливый предикат?С несколькими требованиями?Как мне подойти к этому?

Было бы неплохо просто захватить все сущности с помощью запроса на выборку, а затем перебрать каждый массив и захватить любые объекты, которые я нахожу, которые соответствуют моим критериям поиска?!

Ответы [ 2 ]

83 голосов
/ 15 ноября 2011

Да, это возможно. Вы ищете составные предикаты, и вот пример с предикатами AND:

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

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

Ссылка на документацию https://developer.apple.com/documentation/foundation/nscompoundpredicate

2 голосов
/ 06 июля 2018

Свифт 4

let fetchRequest: NSFetchRequest<YourModelEntityName> = YourModelEntityName.fetchRequest()

let fooValue = "foo"
let barValue = "bar"

let firstAttributePredicate = NSPredicate(format: "firstAttribute = %@", fooValue as CVarArg)
let secondAttributePredicate = NSPredicate(format: "secondAttribute = %@", barValue as CVarArg)

fetchRequest.predicate = NSCompoundPredicate(andPredicateWithSubpredicates: [firstAttributePredicate, secondAttributePredicate])

более подробную информацию о различных типах NSCompoundPredicate конструкторов можно найти здесь

...