NSPredicate с несколькими параметрами

Здравствуйте, нужна помощь с предикатом. Проблема в том, что я хочу иметь одну функцию, которая будет извлекаться из базы данных, в зависимости от множества получаемых ею значений, но значения не всегда существуют, означает ли это, что мне нужно создать несколько разных предикатов?

Код ниже

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"brand_id LIKE %@ AND brand_id LIKE %@ AND brand_id LIKE %@ AND brand_id LIKE %@ AND brand_id LIKE %@ AND item_category LIKE %@ AND item_make LIKE %@ AND item_gender LIKE %@ || item_price>%@ || item_price<%@",
                              brand_one, brand_two, brand_three, brand_four, brand_five, categoryString, makeString, genderString,[NSNumber numberWithInt:price_bottom],[NSNumber numberWithInt:price_top]];

brand_one, brand_two и т. д. иногда существуют, а иногда нет.

И как это должно быть, например, для item_gender. Давайте, если пол не указан, чем иметь их обоих.

Извините, если мое описание проблемы сбивает с толку.

На основе комментариев Gobras был получен следующий код

NSArray *brands = [NSArray arrayWithObjects:brand_one, brand_two, brand_three, brand_four, brand_five, nil];

    NSPredicate *predicate_brands = [NSPredicate predicateWithFormat:@"brand_id like %@" argumentArray:brands];

Логическое объяснение того, что должна выполнять функция поиска

  1. предикат fetchrequest
  2. при запросе на выборку

предикат, основанный на 5 идентификаторах бренда, идентификаторе предмета, категории предмета, марке предмета, поле предмета, если какой-либо из вышеперечисленных пуст, он должен получить все связанные записи, например, если категория элемента пуста, он должен получить все «Ювелирные изделия, часы и т.д.», но ограничить его остальными выражениями предиката.

Должен ли я создать, например, составной предикаты для брендов, а затем создать еще один для категории предметов со значениями «item_category, как ювелирные изделия» и «item_category, как часы», а после этого как мне точно собрать их вместе?

24
задан Rouslan Karimov 8 June 2011 в 17:30
поделиться

1 ответ

Для тех, кто интересуется Swift!

let arrPred = [NSPredicate(format: "yourAttribute LIKE %@", toCompareID), NSPredicate(format: "yourAttribute2 LIKE %@", toCompareID2)] //Add as many predicates you want in short make your query

let compoundpred:NSPredicate = NSCompoundPredicate(andPredicateWithSubpredicates: arrPred)
var arrFiltered = yourArray.filteredArrayUsingPredicate(compoundpred)
2
ответ дан 28 November 2019 в 22:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: