2015-05-13 39 views
0
class SecondViewController:UIViewController { 
    required init(coder aDecoder: NSCoder){ 
    super.init(coder: aDecoder) 
    //Custom logic here 
    } 
} 

相当新手问题:缺少用于呼叫参数“编码器”参数在夫特

的图控制器(SecondViewController),从固有的UIViewController需要像上述的指定初始化函数。

在这种情况下,我应该怎么称呼它,因为我不确定“编码器”应该是什么值?我习惯叫控制器为:SecondViewController(),但它给:

Missing argument for parameter 'coder' in call 

我明白编码参数必须提供,但要问它的价值的来源。

回答

-1

initWithCoder是一个专门用于Interface Builder的构造函数。这是在界面构建器中创建UIViewController时调用的构造函数。

你通过使用'segues'实例化一个视图控制器。如果你还不知道segues,我会建议查看一些文档/教程来处理它们。这真的有助于解释事情。

这个小教程教您如何正确使用塞格斯甚至视图控制器之间传递数据: http://www.appcoda.com/storyboards-ios-tutorial-pass-data-between-view-controller-with-segue/

编辑: 如果你想不使用塞格斯那么也许这段代码可能是一些帮助你(你仍然需要在界面构建器中创建ViewController)然而,

let storyboard = UIStoryboard(name: "MyStoryboardName", bundle: nil) 
let vc = storyboard.instantiateViewControllerWithIdentifier("someViewController") as! UIViewController 
self.presentViewController(vc, animated: true, completion: nil) 
+0

我倾向于以编程方式工作而不接触故事板。那可能吗? – aquajach

+0

@aquajach你应该可以做'var vc = YourViewController()'并在ViewController的viewDidLoad中进行设置。如果你不能这样做,那么在你的'ViewController'类 – Chackle

+0

中实现'init(){}'这个工作对我来说是有用的,即使它不是很理想。多谢兄弟 – aquajach

4

感谢您从@Chackle得到的答案。最后我想出的解决方案如下。

我想要什么:

  • 继承我SecondViewControllerUIViewController
  • 简单地初始化任何新SecondViewControllerSecondViewController()

解决方案:

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

    init() { 
     super.init(nibName: nil, bundle: nil) 
     //Do whatever you want here 
    } 

"required init(coder aDecoder: NSCoder)"我如果你创建了UIViewController的子类,那么这是必须的。 "super.init(nibName: nil, bundle: nil)"也是如此,因为这是UIViewController如何进行初始化。