Bagaimana cara membuat NSPredicate untuk subkueri dengan NSPredicate yang sudah ada?

Di aplikasi saya, satu Audit memiliki banyak Temuan.

Saya memiliki metode yang mengembalikan NSPredicate yang memfilter temuan berdasarkan teks pencarian dan mengetik ID:

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

Saya ingin menggunakan predikat ini untuk memfilter serangkaian Audit menurut properti temuannya. Jadi, dengan keluaran dari metode pertama, saya ingin membuat predikat baru yang setara dengan:

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

...di mana ???? menerapkan predikat saya yang ada pada temuan audit.

Bagaimana saya bisa melakukan ini tanpa memaparkan logika di dalam +predicateWithSearchText:typeId:?


person Simon    schedule 11.11.2016    source sumber


Jawaban (1)


Apakah hal seperti ini yang Anda cari?

- (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
Saya mencari sesuatu dengan efek itu, ya. Idealnya saya ingin itu sama persis dengan menulisnya sebagai subkueri, sehingga data inti dapat secara efisien menuliskannya sebagai pernyataan SQL. Tetapi jika hal seperti itu tidak muncul setelah beberapa saat, saya akan menandai ini sebagai jawaban yang benar. - person Simon; 13.11.2016