无法创建ViewController的实例

时间:2015-06-05 09:55:03

标签: ios swift

全部, 我的ViewController上有一个条形按钮项。我已经设置了一个计算属性来关闭BarButton。我希望能够从另一个类中设置它。

以下是我在视图控制器中的代码:

class ViewController: UIViewController {

    var PayButton : Int {
        didSet {

                navigationItem.leftBarButtonItem = nil
        }
    }

    required init(coder aDecoder: NSCoder)
    {
        self.PayButton = 0
        super.init(coder: aDecoder)

    }

当它尝试在视图控制器上创建一个实例时(所以我可以设置PayButton整数)

let test = ViewController()

我收到错误说

  

在调用

中缺少参数'coder'的参数

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

它要求参数'编码器',因为你在required init中有它。

要使用您的代码,您需要初始化:

let test = ViewController(coder: NSCoder) 

有几种方法可以解决这个问题。最简单的方法是删除所需的初始化程序。

import UIKit

class ViewController: UIViewController {
    var PayButton : Int = 0 {
        didSet {

            navigationItem.leftBarButtonItem = nil
        }
    }
}

然后用

实现
let test = ViewController()
test.PayButton = 0

答案 1 :(得分:0)

因为您已在ViewController类中实现了所需的初始化程序。

有两种解决方案

  1. 添加默认初始值设定项

    init(){    super.init(nibName:nil,bundle:nil)   }

  2. 删除所需的初始化程序。

  3. 类ViewController:UIViewController {

    var PayButton : Int {
        didSet {
    
                navigationItem.leftBarButtonItem = nil
        }
    }
    
    init() {
    
        self.PayButton = 0
        super.init(nibName: nil, bundle:nil)
      }
    
    required init(coder aDecoder: NSCoder)
    {
        self.PayButton = 0
        super.init(coder: aDecoder)
    
    }
    

答案 2 :(得分:0)

试试这个:

这是必需的初始化程序:

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

这是超级初始化器:

override init(frame: CGRect) {
    super.init(frame: frame)
}

这是您的便利初始化程序,您可以在其中传递要创建的视图的大小

convenience init(view: UIView){
    self.init(frame: view.frame)
}

这是您的便利初始化程序,其中视图使用预定义的值进行初始化:

convenience init(){
    self.init(frame: CGRectZero) //Put you predefined value here
}