Zugriff auf Textfeld eines anderen ViewControllers: Error

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

  • Zugriff auf Textfeld eines anderen ViewControllers: Error

    Hallo zusammen,

    in meinem OSX Project möchte ich von einem ViewController aus auf das Textfeld eines anderen ViewControllers zugreifen:

    let vc = self.storyboard.instantiateControllerWithIdentifier("MyVc") as MyViewController
    vc.testTextField.stringValue = "Test"

    Dies ergibt allerdings folgenden Error:
    "fatal error: unexpectedly found nil while unwrapping an Optional value"

    Ist das ein Xcode-bug oder mache ich mit Swift etwas falsch?
    XcodeScout
  • Gib dem ViewController mit dem Textfeld eine nach außen sichtbare Property "testText".
    Von anderen Controllern aus setzt du nun einfach viewControllerMitTextFeld.testText = @"blubb"

    Der VC mit dem Textfeld bekommt dann eine Custom Setter für testText, der den Text dem TextFeld zuweist.
    Außerdem setzt du den Text in viewDidLoad noch über self.testTextField.stringValue = self.testText.

    So sollte der Text immer ankommen, egal ob er nun vor oder nach dem Laden des Views gesetzt wurde.
  • In welchem Anwendungsszenario macht das denn einen Unterschied (jedenfalls iOS6+)?
    viewDidUnload gibt es ja nicht mehr, die Views bleiben geladen, auch wenn die View zwischendurch nicht mehr angezeigt wird (z.B. nicht mehr vorderste View im NavigationStack).
    Dadurch würde der neue Wert ja auch über den Custom Setter weiterhin korrekt an die UI übermittelt werden.

    Wenn die View komplett aus dem Speicher fliegt (dealloc) wird sie beim nächsten Start dann sowieso wieder komplett neu erstellt und viewDidLoad wird ausgeführt.
    In viewWillAppear setze ich normal nur Werte, welche ich in didReceiveMemoryWarning verwerfe falls die View gerade nicht angezeigt wird (z.B. große Bilder in Imageviews etc.).
  • Tobse001 schrieb:

    In welchem Anwendungsszenario macht das denn einen Unterschied (jedenfalls iOS6+)?

    In der Regel brauchst Du den View dann nur an einer Stelle zu aktualisieren, da der Propertywert ja nur geändert wird, wenn der Viewcontroller nicht sichtbar ist.

    BTW: In Swift sollte das Überschreiben eines Setters eher die Ausnahme sein. ;)
    „Meine Komplikation hatte eine Komplikation.“
  • viewDidLoad wird beim Erstelen der View aufgerufen. ViewWillAppear, sowie der Name sagt, jedes Mal wenn der ViewController wieder den Fokus erlangt.

    Also macht es natürlich Sinn wie macmoonshine schon gesagt hat, einzelne Werte dort zu ändern, um die View zu aktualisieren.

    Grüße
    Every language has an optimization operator. In ObjC that operator is ‘//’.

    golbros.de