Swift OSX Daten via Delegate an den aufrufen NSViewController zurückgeben

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Swift OSX Daten via Delegate an den aufrufen NSViewController zurückgeben

    Hallo,

    ich habe folgendes Phänomen. 1.'ter NSViewController übergibt Daten mit prepare(for segue: NSStoryboardSegue, sender: Any?) an einen 2.'ten NSViewController. Dort hat der Benutzer die Möglichkeit die Daten zu evaluieren und die Daten mit ein "OKAY" zu bestätigen. Dieses "OKAY" soll an den aufrufenden 1.'ten ViewController zurückgesendet werden. Nur bei diesem kommt der String nicht an.

    Folgende Schritte habe ich für die Datenrückgabe durchgeführt:
    - Im 2.'ten NSViewController ein Protokoll eingefügt und einen Verweis (weak var delegate:ViewController?) hergestellt
    - Im 1.'ten NSViewController die Klassendefinition um das Protokoll ergänzt (class ViewController: NSViewController, DisplayViewControllerDelegate)
    - Des Weiteren im 1.'ten ViewController eine Funktion (func doSomethingWith(data: String)) die i. A. nur den empfangenen String data ausgibt hinzugefügt.
    - Den 2.'ten Viewcontroller verlasse ich mit einem Button (Action). Dachte nun es reicht wenn ich die Protokollfunktion mit den entsprechenden Daten
    befühle (delegate?.doSomethingWith(data: "OKAY")) und den 2.'ten ViewController via dismss() beende.

    Doch im 1.'ten ViewController kommt das "Okay" nicht an. Was übersehe ich hier?

    P.S.:Muss die App nur ergänzen. Insofern bitte keine Verbesserungsvorschläge hinsichtlich des Ablaufs. Danke
  • MCDan schrieb:

    Ich tippe jetzt mal, dass Du den Delegate im 2. ViewController beim prepare(for segue: NSStoryboardSegue, sender: Any?) nicht gesetzt hast.
    ?( Ich dachte prepare(...) funktioniert nur vorwärtsgerichtet? Also vom 1.'ten in den 2.'ten ViewController? Das funktioniert auch tadellos. Benötige ich für den Rückweg (2.'ten -> 1.'ten VC) ebenfalls eine prepare-Methode im 2.'ten VC? Dachte dies erledigt man mit der Delegate-Methode und einer zugehörigen Funktion, welche im 1.'ten VC definiert wird und durch den Aufruf im 2.'ten VC gefüllt wird?

    Kann auch sein, dass ich hier gerade etwas durcheinander bringe. Anbei mal meine prepare-Methode aus dem 1.'ten VC.

    Quellcode

    1. override func prepare(for segue: NSStoryboardSegue, sender: Any?)
    2. {
    3. ...
    4. if(segue.identifier == "ViewController2"){
    5. let displayVC = segue.destinationController as! ViewController2
    6. displayVC.delegate = self
    7. }
    8. }

    @MCDan: Ich habe mir mal den Vergleichswert von segue.identifier ausgeben lassen. :D da muss nicht die ID des ViewControllers abgefragt werden, sondern die ID des Segue. Die Rückgabe funktioniert nun. :thumbsup: Dein Tipp hat mich auf die richtige Spur gebracht - Danke.


    Nun erhalte ich jedoch folgenden Hinweis: "UnwindSegue[...:....] MessageTracer: Falling back to default whitelist". Wo muss ich was nachtragen um diesen Hinweis zu beseitigen?

    Lösung: xcode -> Product -> Clean Build Folder - da war wohl irgend etwas in Schieflage geraten. :!:

    Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von OSXDev ()