Push ViewController с кодером aDecoder: NSCoder

Я пытаюсь подтолкнуть контроллер представления с помощью:

var vc2 = ViewController2()

self.navigationController?.pushViewController(vc2, animated: false)

но в моем втором контроллере представления у меня есть:

required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
}

Но я получаю ошибку Missing argument for parameter 'coder' in call в первом ViewController. Что идет в скобках в первом контроллере представления?

2 ответа

Решение

Есть два способа решить эту проблему:

Самый простой способ - просто вызвать функцию, передав ноль параметрам:

var vc2 = ViewController2(nibName: nil, bundle: nil)

Лучший способ - создать удобные инициализаторы в своем классе:

class ViewController2: UIViewController {
    required init(coder aDecoder: NSCoder) {
        fatalError("This class does not support NSCoding")
    }
    override init (frame : CGRect) {
        super.init(frame : frame)
    }
    convenience override init () {
        self.init(frame:CGRectZero)
    }
}

и теперь вы можете позвонить:

var vc2 = ViewController2()
class ViewController2: UIViewController {
    convenience init () {
        self.init(nibName: nil, bundle: nil)
    }
} 

Теперь вы можете позвонить ViewController2()

Другие вопросы по тегам