缺少参数'编码器的参数'在斯威夫特的电话中

时间:2015-05-13 08:34:17

标签: ios xcode swift

class SecondViewController:UIViewController {
  required init(coder aDecoder: NSCoder){
    super.init(coder: aDecoder)
    //Custom logic here
  }
}

相当新手问题:

视图控制器(SecondViewController),UIViewController固有的需要一个指定的init函数,如上所述。

在这种情况下,我应该怎么称呼它,因为我不确定"编码器"的价值。应该?我以前将控制器称为:SecondViewController(),但它给出了:

Missing argument for parameter 'coder' in call

我理解必须提供编码器参数,但想知道它的值来自何处。

2 个答案:

答案 0 :(得分:6)

感谢@Chackle的回答。最后,我想出的解决方案如下。

我想要的是什么:

  • SecondViewController
  • 继承我的UIViewController
  • 只需将新SecondViewController初始化为SecondViewController()
  • 即可

解决方案:

    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初始化的方式。

答案 1 :(得分:-1)

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

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

这个小教程教你如何正确使用segue,甚至在View Controllers之间传递数据: http://www.appcoda.com/storyboards-ios-tutorial-pass-data-between-view-controller-with-segue/

编辑: 如果你不想使用segues,那么这些代码可能对你有所帮助(你仍然需要在界面构建器中创建ViewController)

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