modusT
modusT

Reputation: 89

Programmatically initialize ViewController

I am trying to initialise a UIViewController in my Swift application but I am facing a problem to which I cannot find any definitive answer.

I would like to call this from a FlowCoordinator to initialise the controller, but my initialiser requires a NSCoder object due to the required init?(coder: NSCoder) function.


MyAwesomeController()

Is there a way to initialise differently the controller, without the need to pass the NSCoder object?

If there is not, how can I create such an object in a way to avoid the following exception:

'NSInvalidArgumentException', reason: '*** -decodeObjectForKey: cannot be sent to an abstract object of class NSCoder: Create a concrete instance!'

Thank you very much in advance

Upvotes: 7

Views: 6838

Answers (2)

cnazk
cnazk

Reputation: 76

Since UIViewController inherits feom UIResponder, and UIResponder inherits from NSObject, it has empty initializer like init(). So you can just call MyAwesomeController() and it works without any errors. If there is any the error is somewhere else like an outlet in storyboard.

Upvotes: 2

J. Doe
J. Doe

Reputation: 13063

Use something like this, I included a property also as a demo:

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")
    }
}

I like creating everything programmatically.

Upvotes: 11

Related Questions