2016-11-11 5 views
0

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

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

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

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

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

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

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

ответ

0

Что-то типа этого, что вы ищете?

- (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; 
    }]; 
} 
+0

Я ищу что-то с этим эффектом, да. В идеале я хотел бы, чтобы это было точно эквивалентно написанию его как подзапроса, так что основные данные могут эффективно записывать его как инструкцию SQL. Но если через какое-то время ничего не получится, я буду отмечать это как правильный ответ. – Simon