Frage

Ich werde gleich sagen, ich bin ein unerfahrener Kakao -Programmierer, und ich entschuldige mich, wenn meine Frage in den Dokumenten irgendwie beantwortet wird und ich es nur verpasst habe, oder es gab etwas, das ich in der Funktionsweise des NSpredicateEditors nicht verstehe. Ich habe jedoch versucht, in den Dokumenten zu suchen und zu googelten, um wenig zu wirken. So bringe ich Ihnen die Frage.

Ich versuche, eine zentrale datenbasierte Tabellenansicht mit einem NSPREDIateDitor zu filtern. Die Filterung funktioniert in Bezug auf die Zeilenfilterung auf der Grundlage verschiedener Kriterien durch Erstellen eines NSCompoundPredicate. Wenn jedoch eine Zeile im Prädikat -Editor keinen Text in ihrem Suchfeld hat, ist das zurückgegebene NSPREDIATE etwas in der Reihe der Zeilen von

dataName CONTAINS[cd] ""

... was nicht zu den Kerndatensätzen entspricht - nicht das, was ich will. Wenn dieses Suchfeld in dieser Zeile leer ist, möchte ich im Wesentlichen nicht, dass es meinen Datensatz überhaupt filtert.

Meine Frage ist dann, was ist die einfachste/beste Lösung, um diese Teile des Prädikats zu ignorieren? Meine ursprüngliche Idee war es, den NSpredicateEditor-Wert Zeilen-für-Reis zu analysieren (NSPredicate *)predicateForRow:(NSInteger)row und bauen Sie das Prädikat selbst wieder auf und ignorieren Linien, die versuchen zu übereinstimmen "", Aber das scheint unnötig umständlich. Die endgültige NSCOMPoundPredicate mit der Abteilung von - (NSArray *)subpredicates Und so scheint es auch so zu bearbeiten, dass ich vielleicht den falschen Angriff nehme. Gibt es eine elegantere Möglichkeit, dies zu tun?

*Um klar zu sein, denke ich darüber nach, die Kopie des Prädikats zu bearbeiten, die ich dann für meine Tabellenansicht an den Controller übergeben habe, und nicht tatsächlich das erste Prädikat bearbeiten, das derzeit im NSpredicateEditor gespeichert ist.

War es hilfreich?

Lösung

Es sieht so aus, als ob Sie in der Lage sein sollten, NSpredicateEditor zu unterklassen und überschreiben predicateForRow: (In NSREPREDIATEDEDITOR -Superklasse, Nsrueditor, deklariert) und dort Ihre Substitution durchführen. Sie würden im Grunde genommen nur die Implementierung von Super bezeichnet, dann das Prädikat untersuchen und bei Bedarf eine neu erstellte zurückgeben.

Andere Tipps

Brian hat die richtige Idee, denke ich, aber NSPredicateEditor Unter Schneeleopard ruft nicht ein -predicateForRow: Um seine Prädikate zu erzeugen. Sie müssen die höhere Ebene überschreiben -predicate Methode, aber es ist immer noch ziemlich einfach, die Prädikatstruktur zu untersuchen und Vergleiche gegen a zu beschneiden nil oder leere Zeichenfolge constantValue.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top