以编程方式初始化ViewController

时间:2019-05-11 11:27:23

标签: swift uiviewcontroller initialization

我正在尝试在我的Swift应用程序中初始化UIViewController,但遇到一个我找不到任何明确答案的问题。

我想从FlowCoordinator调用它来初始化控制器,但是由于所需的init?(编码器:NSCoder)函数,我的初始化程序需要一个NSCoder对象。


MyAwesomeController()

是否有一种方法可以对控制器进行不同的初始化,而无需传递NSCoder对象?

如果没有,如何避免以下异常创建此类对象:

  

'NSInvalidArgumentException',原因:'*** -decodeObjectForKey:不能   被发送到NSCoder类的抽象对象:创建一个具体的   实例!'

非常感谢您

2 个答案:

答案 0 :(得分:0)

使用类似这样的内容,我还提供了一个属性作为演示:

class MyAwesomeViewController: UIViewController {
    let someInt: Int

    init(someInt: Int) {
        self.someInt = someInt

        super.init(nibName: nil, bundle: nil)
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("Storyboard are a pain")
    }
}

我喜欢以编程方式创建所有内容。

答案 1 :(得分:0)

由于UIViewController继承了feom UIResponder,而UIResponder继承自NSObject,因此它具有空的初始化程序,如init()。 因此,您只需调用MyAwesomeController(),它就可以正常工作而不会出现任何错误。 如果有任何错误,则是故事板中的插座等其他地方。