2015-06-21 2 views
0

Я пытаюсь нажать на контроллер представления с помощью:Нажмите 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. Что происходит в скобках в первом контроллере представления?

ответ

1

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

Простым способ, просто вызовите функцию прохождения ноля с параметрами:

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() 
1
class ViewController2: UIViewController { 
    convenience init() { 
     self.init(nibName: nil, bundle: nil) 
    } 
} 

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