Ответ 1
Что вам нужно сделать, так это создать предикат для каждого из ваших предложений. Например, расставьте свой запрос:
- ВЫБОР * ОТ ОПЕРАЦИЙ
- WHERE CATEGORY IN (categoryList)
- И LOCATION IN (locationList)
- И TYPE IN (typeList)
- И ПРИМЕЧАНИЕ содержит [cd] "некоторый текст"
- И DATE >= fromDate И DATE < + toDate
Исходя из этого, у вас есть 5 предикатов (2-6). Так что пусть работа над ними одна за другой.
NSPredicate *inCategoryPredicate = [NSPredicate predicateWithFormat:@"Category IN %@", categoryList];
NSPredicate *locationPredicate = [NSPredicate predicateWithFormat:@"Location IN %@", locationList];
NSPredicate *typePredicate = [NSPredicate predicateWithFormat:@"Type IN %@", typeList];
NSPredicate *notePredicate = [NSPredicate predicateWithFormat:@"Note contains[c] %@", @"Some Text"];
NSPredicate *startDatePredicate = [NSPredicate predicateWithFormat:@"Date => @", fromDate];
NSPredicate *endDatePredicate = [NSPredicate predicateWithFormat:@"Date <= @", toDate];
Теперь вам просто нужно объединить их в один предикат: Состояние документации Apple:
Вы должны структурировать составные предикаты, чтобы свести к минимуму количество работа выполнена. Регулярное выражение, в частности, является дорогостоящим операция. В сложном предикате вы должны выполнять простые тесты перед регулярным выражением;
Сказав это, вы должны сначала начать с "простых" предикатов. Итак:
NSCompoundPredicate *compoundPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:[NSArray arrayWithObjects: startDatePredicate, endDatePredicate, inCategoryPredicate, locationPredicate, typePredicate, notePredicate];
Вы всегда можете получить представление о том, как выглядит предикат (sql where), если вы NSLog его.