Es ist schwer zu verstehen, wonach genau Sie fragen. Meinst du wirklich, du erstellst und löschst NSTokenFieldCells? Ich glaube nicht, dass Sie das tun - ein NSTokenField-Steuerelement verfügt über eine NSTokenFieldCell-Instanz. Die gesamte Assembly repräsentiert nur bestimmte Strings (die Sie über das NSTokenFieldDelegate-Protokoll steuern) als grafische "Tokens". Die Zelle wird nicht jedes Mal neu erstellt, sondern nur, was sie darstellt/zeichnet.
Möchten Sie benachrichtigt werden, wenn eine Token-Zeichenfolge aus dem Feld gelöscht wird? Wenn dem so ist, fürchte ich, dass es nicht so funktioniert. Sie Sie entscheiden, welche Zeichenfolgen (getrennt durch den Token-Zeichensatz, den Sie das zu verwendende Token-Feld angegeben haben) und die Ersatzzeichenfolge (normalerweise eine gekürzte oder bereinigte Version) als Token angezeigt werden. Daher ist es bis zu Sie zu bestimmen, ob ein "Token", das in Ihrem Modell ist jetzt fehlt und reinigen Sie es selbst.
Einfach ausgedrückt: Es gibt keine Möglichkeiten, dies in Cocoa Bindings zu tun. Am besten ist es, ein "-tokensNeedCleaning" -Flag beizubehalten und es so zu behandeln, wie die Methoden -setNeedsDisplay: und -displayIfNeeded mit NSView arbeiten. Auf diese Weise können Sie, wenn das Tokenfeld bearbeitet wird, [self setTokensNeedCleaning: YES] aufrufen. Diese Methode kann wiederum "[self cleanTokensIfNeeded]" über -performSelector: withObject: afterDelay: (mit einer Verzögerung von null Sekunden) aufrufen, um die Bereinigung der fehlenden Tokens zu planen, wenn das needsCleaning-Flag YES ist. Es wird dann die Flagge unkenntlich machen.
Dieser einfache Mechanismus verhindert, dass die Bereinigungsroutine bei jeder folgenden Änderung ausgeführt wird, sondern kennzeichnet sie und plant sie so, dass sie in der unmittelbaren Zukunft ausgeführt wird, wenn sie noch benötigt wird. Auf diese Weise werden aufeinanderfolgende geplante Aufrufe an -cleanTokensIfNeeded nicht ständig versuchen, aufzuräumen - die Bereinigungsaufrufe werden zusammengeführt.
Sorry für die Verwirrung.Sie können davon ausgehen, dass ich benachrichtigt werden möchte, wenn eine in Token enthaltene Zeichenfolge aus dem Feld gelöscht wird. Dein TokensNeedCleaning Flag-Setup klingt wie eine vernünftige Lösung. Ich bin jedoch in ein neues Problem geraten. Um festzustellen, welche Token-Strings gelöscht wurden, muss der gespeicherte Wert mit dem Formularwert verglichen werden. Wenn ich den Wert meines Formulars durch Aufruf von objectValue auf meinem NSTokenField erhalte, wird sein Delegat gesendet tokenField: reprotectedObjectForEditingString: der eingerichtet ist, um ein neues Token zu speichern. – tassock
Ich fand objectValue nicht TokenField ausgelöst: reprodedObjectForEditingString: wenn in TextDidEndEditing aufgerufen. Ich bin alles Set erstellen und löschen Sie die Funktionalität für meine NSTokenField. Danke für die Anleitung! – tassock