2016-07-18 4 views
3

In meiner Swift-Anwendung für Mac OS X verwende ich eine NSTokenField. Ich verwende unter anderem die Delegate-Methoden tokenField(tokenField: NSTokenField, representedObjectForEditingString editingString: String) -> AnyObject und tokenField(tokenField: NSTokenField, displayStringForRepresentedObject representedObject: AnyObject) -> String?, um mit dargestellten Objekten zu arbeiten. Meine dargestellten Objekte sind Instanzen einer benutzerdefinierten Klasse.Probleme mit NSTokenView (wieder) - mit Objektwert

Vom Apple Documentation, ich weiß, dass objectValue verwendet werden können, um die dargestellten Objekte eines NSTokenView als NSArray zuzugreifen:

die Objekte durch die Tokens in einem Token-Feld, senden Sie das Token-Feld dargestellt abzurufen eine objectValue Nachricht. Obwohl diese Methode von NSControl deklariert wird, implementiert NSTokenField es, um ein Array von dargestellten Objekten zurückzugeben. Wenn das Token-Feld einfach eine Folge von Strings enthält, gibt objectValue ein Array von Strings zurück. Verwenden Sie zum Festlegen der dargestellten Objekte eines Tokenfelds die Methode setObjectValue:, und übergeben Sie ein Array von dargestellten Objekten. Wenn diese Objekte keine Zeichenfolgen sind, fragt NSTokenField ihren Delegaten nach den Anzeigestrings ab, die für jedes Token verwendet werden sollen.

Allerdings scheint dies für mich nicht zu funktionieren. let tokenArray = self.tokenField.objectValue! as! NSArray gibt ein NSArray zurück, aber es ist leer, obwohl die Delegate-Methode, die erforderlich ist, um ein dargestelltes Objekt zurückzugeben, zuvor entsprechend oft aufgerufen wurde.

NSTokenView scheint nicht ein besonders starkes Werkzeug zu sein, mit Tokenization zu arbeiten, aber, ohne eine Alternative, ich hoffe, dass Sie mir helfen können, meine Implementierung zu arbeiten.

Vielen Dank im Voraus!

+1

In einer schnellen Demo-App - nur '' tokenField: displayStringForReprenededObject: '' implementieren - die '' objectValue'' Eigenschaft des Tokenfeldes verhielt sich wie in der Dokumentation beschrieben. Dies lässt mich glauben, dass das Verhalten, das Sie erhalten, auf ein Problem in Ihrem Code zurückzuführen ist. Können Sie die Implementierung der Delegate-Methoden zusammen mit ein paar Informationen über Ihre benutzerdefinierte Klasse veröffentlichen? –

+1

Was ist 'NSTokenView'? – Willeke

Antwort

0

Dies funktioniert für mich:

let tokenStrings = tokenField.objectValue as! [String] 

wo tokenField die NSTokenField, aus denen Sie die Saiten extrahieren möchten.