我正在尝试在我的Swift应用程序中初始化UIViewController
,但遇到一个我找不到任何明确答案的问题。
我想从FlowCoordinator调用它来初始化控制器,但是由于所需的init?(编码器:NSCoder)函数,我的初始化程序需要一个NSCoder对象。
MyAwesomeController()
是否有一种方法可以对控制器进行不同的初始化,而无需传递NSCoder
对象?
如果没有,如何避免以下异常创建此类对象:
'NSInvalidArgumentException',原因:'*** -decodeObjectForKey:不能 被发送到NSCoder类的抽象对象:创建一个具体的 实例!'
非常感谢您
答案 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(),它就可以正常工作而不会出现任何错误。 如果有任何错误,则是故事板中的插座等其他地方。