2016-11-11 2 views
0

In meiner App hat ein Audit viele Ergebnisse.Wie erstelle ich ein NSPredicate für eine Unterabfrage bei einem vorhandenen NSPredicate?

Ich habe eine Methode, die eine NSPredicate liefert die Ergebnisse von Suchtext und Typ-ID-Filter:

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

Ich möchte dieses Prädikat verwenden, um eine Reihe von Audits zum Filtern entsprechend den Eigenschaften ihrer Ergebnisse. Also, da der Ausgang des ersten Verfahrens, ich möchte ein neues Prädikat Äquivalent schaffen:

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

... wo ???? meine bestehenden Prädikat gilt für die Feststellungen der Prüfung.

Wie kann ich dies tun, ohne die Logik innerhalb +predicateWithSearchText:typeId: zu offenbaren?

Antwort

0

Ist etwas wie das, wonach Sie suchen?

- (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

Ich bin auf der Suche nach etwas mit diesem Effekt, ja. Idealerweise möchte ich, dass es genau so ist, als würde es als Unterabfrage geschrieben, so dass Kerndaten es effizient als SQL-Anweisung schreiben können. Aber wenn so etwas nach einer Weile nicht mehr auftaucht, werde ich das als die richtige Antwort bezeichnen. – Simon