Swift必须调用超类的指定初始化程序uiinputviewcontroller

8

我在今天升级到8.3版本之后遇到了标题中的错误。

下面的代码以前可以完美运行,但现在无法编译。有人能帮我解决吗?

protocol CustomAccessoryProtocol {
    func controlButtonPressed(tag:Int)
}

class CustomAccessory : UIInputViewController {
    var accessoryView : UIView!
    var delegate : CustomAccessoryProtocol!

    @IBOutlet weak var returnButton: UIButton!
    @IBOutlet weak var backButton: UIButton!
    @IBOutlet weak var forwardButton: UIButton!

    init(delegate: CustomAccessoryProtocol){
        super.init()
        self.delegate = delegate
    }

    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        fatalError("init(coder:) has not been implemented")
    }

    override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
        super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
        let customNib = UINib(nibName: "CustomAccessory", bundle: nil)
        accessoryView = customNib.instantiateWithOwner(self, options: nil)[0] as! UIView
    }

    @IBAction func buttonPress(sender: AnyObject) {
        delegate.controlButtonPressed(sender.tag!)
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        view.addSubview(accessoryView)
    }
}

1
我想知道UIInputViewController的指定初始化程序是什么? 我猜不是init(frame: CGRect) - clearlight
1
第一个init不是方便初始化吗?你必须添加convenience关键字吗?我还没有完全掌握它。有些情况下,我需要花费一些时间才能弄清楚它。根据你已经拥有的初始化器,我猜想你在某个时候阅读了Swift文档中关于此主题的内容... - clearlight
1
UIInputViewController或者UIViewController在8.3的文档中有什么改动吗? - clearlight
我找不到任何变化,或者可能是我漏掉了什么。我也在想指定的初始化程序,因为我所能看到的都是我已经有的。也许他们会更新文档,因为迄今为止我没有看到任何关于此的内容。但是,当将convenience添加到第一个init和self.init而不是super时,似乎它可以工作。您先生刚刚让我的一天! - Razvan Soneriu
太好了!很高兴它成功了。 - clearlight
1个回答

7

我在使用 NSWindowController 的以下代码中遇到了同样的问题:

init() {
    super.init()
}

我已将其改为:

convenience init() {
    self.init()
}

我认为苹果现在比以前更严格地执行方便初始化。


使用self.init()时,我收到警告“找不到接受提供的参数的'init'的重载”。 - Pedroinpeace
添加“convenience init()”让我感到很多余,请帮忙。 - manish_kumar
可能是因为你正在引用 self.init(),而这个函数又在引用自身? - Charlie
2
不行,这就像递归函数调用一样,永远不会起作用。为什么它有这么多的赞? - jblixr
1
这会导致一个无限循环。 - nambatee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接