NSPredicate mit Funktionen oder Selektoren
Habe ich eine Menge Leute NSManagedObjects, die ich brauche, Filterung und hoffte, dass er es in den ersten Abruf anstelle von filtern das array danach. Ich habe Selektoren in Prädikaten vor, aber nie beim abholen NSManagedObjects, ich habe zum Beispiel alle meine Mitarbeiter und dann benutze ich dieses Prädikat auf die NSArray...
[NSPredicate predicateWithFormat:@"SELF isKindOfClass:%@", [Boss class]]
...aber ich will jetzt noch ein bisschen mehr Mathematik, basierend auf verschiedenen Parametern der Objekte. Ich dachte, ich könnte etwas tun...
[NSPredicate predicateWithFormat:@"SELF bonusIsAffordable:%f", howMuchMoneyTheCompanyHas];
..wo bonusIsAffordable: ist eine Methode, meine Mitarbeiter-Klasse und würde ausrechnen, ob ich mir leisten kann, Sie zu bezahlen ein bonus. Aber ich bekomme eine Fehlermeldung...
Unknown/unsupported comparison predicate operator type cocoa
Irgendwelche Ideen, was ich bin vermasseln?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie beliebigen code ausführen in einer NSPredicate nur beim qualifying Objekte im Speicher. Im Falle einer SQLite-backed
NSPersistentStore
, dieNSPredicate
kompiliert SQL und ausgeführt, die auf die SQLite-query-engine. Da SQLite keine Kenntnisse in Objective-C, noch sind keine Objekte instanziiert werden, es gibt keine Möglichkeit, beliebigen code auszuführen.In-memory-Abfragen (gegen eine Sammlung oder eine in-memory-oder atomic Core Data store), haben Sie einen Blick auf
NSExpression
, insbesondere+[NSExpression expressionForFunction:selectorName:arguments:]
und+[NSExpression expressionForBlock:arguments:]
. Angesichts eines solchen Ausdrucks können Sie bauen eineNSPredicate
programmatisch.Dieser bekommt eine ganze Menge einfacher mit Blöcke:
Ihrem Prädikat string nicht sagen, das Prädikat, Objekt, was zu tun ist. Die Methode vermutlich ein boolean zurückgibt, aber das Prädikat nicht wissen, was zu vergleichen. Genauso gut könnte man Sie mit einem Prädikat string "TRUE" und erwartete es, um zu wissen, was zu tun ist.
Versuchen: