2017-09-20 1 views
0

Wenn Sie einen ViewController über ein Storyboard (NS oder UI) initialisieren, müssen Sie einen Verweis auf das Storyboard behalten oder können Sie es einfach ignorieren, wenn Sie damit fertig sind und es dann löschen lassen?Storyboard-Initialisierung und Deinit

class ViewController: NSViewController { 

    var secondarySB: NSStoryboard? = nil 

    @IBAction 
    func loadAndKeep(_ sender: NSButton) { 
     //keeping a reference 
     secondarySB = NSStoryboard.init(name: NSStoryboard.Name.init(rawValue: "Secondary"), bundle: nil) 
     let vc = secondarySB?.instantiateInitialController() as! Secondary 
     self.view.addSubview(vc.view) 
    } 
    @IBAction 
    func load(_ sender: NSButton) { 
     //ignoring the storyboard after I get the viewcontroller 
     let sb = NSStoryboard.init(name: NSStoryboard.Name.init(rawValue: "Secondary"), bundle: nil) 
     let vc = sb.instantiateInitialController() as! Secondary 
     self.view.addSubview(vc.view) 
    } 
} 
+1

Ich habe festgestellt, dass Sie mit "wie!" Gewirkt haben; Dies wird normalerweise nicht empfohlen, sollten Sie stattdessen "wie?" und dann "vc? .view" für den Fall, dass etwas schief gelaufen ist. Es gibt ein nettes Tool namens SwiftLint, das diese Art von Zeugs abfängt und Build-Warnungen generiert. – ekscrypto

+0

kann es sein, dass es nicht nötig ist, die Referenz des Storyboards zu behalten –

Antwort

1

Sie brauchen nicht einen Verweis auf das Storyboard zu halten, aber Sie müssen die instanziiert-View-Controller als Kind View-Controller hinzuzufügen.

Verwandte Themen