Swift Datenübergabe aus einer Klasse (NSViewController) an eine weitere Klasse (NSView)

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

  • Swift Datenübergabe aus einer Klasse (NSViewController) an eine weitere Klasse (NSView)

    Hallo,

    innerhalb meiner Klasse VCStatistik vom Typ NSViewController führe ich verschiedene Berechnungen durch. Das Ergebnis (Variable vom Typ Float) möchte ich nun an eine weitere Klasse VStatistic (NSView) übergeben. Bisher hatte ich hierzu eine globale Variable verwendet. Mir ist bewusst, dass dies keine schöne Lösung ist, aber für den Test der Funktion hat es ausgereicht.

    Nun wollte ich die Übergabe mit einem Segue realisieren.


    Quellcode

    1. class VCStatistik: NSViewController{
    2. var ergebnis Float = 0.0
    3. ...
    4. override func prepare(for segue: NSStoryboardSegue, sender: Any?)
    5. {
    6. NSLog("segue: ", ergebnis)
    7. if let dest = segue.destinationController as? VStatistic
    8. {
    9. dest.wert = ergebnis
    10. }
    11. }
    12. }
    Alles anzeigen

    Anbei der Quellcode der VStatistic, in dem der zu übertragende Wert leider nicht ankommt. ;(

    Quellcode

    1. class VStatistic: NSView {
    2. var wert: Float?
    3. ....
    4. print("dest.wert:", wert ?? 3.3)
    5. }
    Dachte eigentlich, dass dies so funktionieren müsste - ist aber nicht der Fall. Die Ausgabe liefert grundsätzlich den Defaultwert 3.3. Vielleicht kann mir jemand erklären was ich hier evtl. nicht beachte?

    Mal vorab ein Danke.
  • matz schrieb:

    Springt er denn in den if-Zweig?
    @matz: Innerhalb der prepare Funktion habe ich nun eine Ausgabe mit print(...) eingefügt. Ausgabe erfolgt nicht. :S

    MCDan schrieb:

    Der destinationController einer Segue sollte eigentlich vom Typ NSViewController und nicht NSView sein. Da dürfte das Problem liegen.
    @MCDan: So etwas hatte ich befürchtet. :( Hast Du eine Idee wie ich die Variable bzw. deren Inhalt dennoch an den NSView übergeben könnte, ohne eine globale Variable nutzen zu müssen. Da gibt es doch bestimmt eine elegante Möglichkeit?


    Nach einer Cafépause ist mir aufgefallen, dass ich den NSViewController gar nicht verlasse und somit auch die prepare-Funktion gar nicht aufgerufen wird! ?(
    Den das NSView Objekt ist ja Bestandteil des aktuellen NSViewControllers :D .

    Nun bleibt aber immer noch offen, wie ich aus der NSView Klasse auf die Variable der NSViewController Klasse zugreifen kann ohne eine globale Variable nutzen zu müssen. Das Problem ist nicht trivial, da der Zugriff sehr schnell erfolgen muss, ansonsten bleibt mir die Anzeigen hängen. Also einfach in einer DB-Tabelle speichern bzw. die User Settings zu bemühen scheitert.

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

  • Wenn sich der View in dem Main View des View Controllers befindet und der komplette View Controller aus dem Storyboard stammt, dann kannst Du in dem View Controller einfach ein IBOutlet auf den View verwenden.

    Über diese IBOutlet Referenz kannst Du dann auf den View und alle Public Properties des Views zugreifen.