Как создать NSPredicate для подзапроса с учетом существующего NSPredicate?

В моем приложении у одного аудита много выводов.

У меня есть метод, который возвращает NSPredicate, который фильтрует результаты по тексту поиска и идентификатору типа:

+ (NSPredicate)predicateWithSearchText:(NSString *)searchText typeId:(NSNumber *)typeId;

Я хочу использовать этот предикат для фильтрации массива аудитов в соответствии со свойствами их выводов. Итак, учитывая вывод первого метода, я хочу создать новый предикат, эквивалентный:

[NSPredicate predicateWithFormat:@"SUBQUERY(findings, $x, ????).@count > 0"]

...где ???? применяет мой существующий предикат к результатам аудита.

Как я могу сделать это, не раскрывая логику внутри +predicateWithSearchText:typeId:?


person Simon    schedule 11.11.2016    source источник


Ответы (1)


Что-то вроде этого, что вы ищете?

- (void)sampleMethod:(NSPredicate *)predicateWithSearchText {
    NSPredicate *pred = [NSPredicate predicateWithBlock:^BOOL(id object, NSDictionary *bindings) {
        BOOL auditFinding = [self auditFinding:object];
        BOOL predFinding = [predicateWithSearchText evaluateWithObject:object];
        return auditFinding && predFinding;
    }];
}
person Alex    schedule 11.11.2016
comment
Я ищу что-нибудь с таким эффектом, да. В идеале я хотел бы, чтобы это было точно эквивалентно написанию его как подзапроса, чтобы основные данные могли эффективно записывать его как оператор SQL. Но если ничего подобного не появится через некоторое время, я отмечу это как правильный ответ. - person Simon; 13.11.2016