Bearbeiten eines NSPredicate mit NSPredicateEditor
-
13-09-2019 - |
Frage
Ich kann ein NSPredicate einfach erstellen eine NSPredicateEditor (eine Unterklasse von NSRuleEditor) verwendet wird. Was ich möchte wissen, ist dies:
Wie kann ich eine vorhandene NSPredicate nehmen (ein durch den Editor erstellt) und in den Editor laden, damit ich es ändern kann?
EDIT: Ich habe versucht, @ John Vorschlag setObjectValue der Verwendung :, aber das hat nicht ganz funktioniert. Lassen Sie mich erklären meine gründen ein bisschen mehr:
Ich habe ein Dokument-basierten Kakao app bekam, und das Dokumentfenster hat gerade einen NSPredicateEditor darauf. Im dataOfType:error:
Methode, die ich habe:
NSPredicate * pred = [predicateEditor objectValue];
NSData * predicateData = [NSKeyedArchiver archivedDataWithRootObject:pred];
return predicateData;
In der readFromData:ofType:error:
Methode, die ich habe:
NSPredicate * pred = [NSKeyedUnarchiver unarchiveObjectWithData:data];
[predicateEditor setObjectValue:pred];
return (pred != nil);
Ich habe festgestellt, dass das Prädikat immer korrekt archivierte und aus dem Archiv entfernt, aber nach einem gespeichertes Prädikat öffnet, wird das Prädikat nicht in die predicateEditor geladen. (Ja, predicateEditor als IBOutlet angeschlossen)
Lösung
Stellen Sie die objectValue
Eigenschaft des NSPredicateEditor
zum Prädikat in Frage.
Die Dokumentation hat diese Beschreibung des Ladevorgangs; hat irgendetwas davon scheinen, wie es ein Problem mit dem Setup verursachen könnte?
Als erstes wird eine Instanz NSPredicateEditor erstellt, und einige Zeilen Vorlagen werden auf gesetzt it-entweder durch eine Nib-Datei oder programmatisch. Die erste Sache Prädikat Editor tut, ist jeder fragen die Vorlagen für ihre Ansichten, mit templateViews.
Nach dem Prädikat Editor einrichten, Sie senden es in der Regel ein setObjectValue: Nachricht eine Wiederherstellung gespeichert Prädikat. NSPredicateEditor muss, um zu bestimmen, welche ihrer Vorlagen sollte jede Anzeige Prädikat im Prädikat Baum. Es tut dies, indem jeder seiner Reihe Senden Vorlagen ein matchForPredicate: Nachricht und die Wahl der Gefahr, dass die zurück höchster Wert.
Nach der besten Übereinstimmung für eine Suche Prädikat, NSPredicateEditor Kopien diese Vorlage frische Ansichten zu erhalten, fügt sie in die richtige Zeile und setzt dann das Prädikat auf dem Vorlage setPredicate :. Innerhalb das Verfahren, das NSPredicateEditorRowTemplate Objekt muss seine Ansichten Werte auf repräsentiert dieses Prädikat.
NSPredicateEditorRowTemplate nächstes fragt die Vorlage für die „darstellbaren Unter Prädikaten“des Prädikats von Senden einer displayableSubpredicatesOfPredicate: Botschaft. Wenn eine Vorlage stellt ein Prädikat in seiner Gesamtheit, oder wenn die Prädikat hat kein subpredicates, kann es Rückkehr null für diese. Ansonsten ist es sollte eine Liste von Prädikaten zurückzukehren hergestellt in Unterreihen sein, daß Vorlage der Reihe. Der ganze Prozess wiederholt sich für jeden Unter Prädikat.