Reputation: 89
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
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
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