gpt4 book ai didi

ios - 初始化器不会覆盖其父类(super class)中的指定初始化器

转载 作者:IT王子 更新时间:2023-10-29 05:02:25 25 4
gpt4 key购买 nike

所以我刚刚升级到 Xcode 6.3 Beta 3,出现了很多与以下相关的错误:

Initializer does not override a designated initializer from its superclass.

override init() {
super.init()
}

例如这是一个 UIButton 类:

class CustomButton: UIButton {

var target: AnyObject!
var selector: Selector!
var action: (() -> Void)!

override init() { // Initializer does not override a designated initializer from its superclass
super.init() // Must call a designated initializer of the superclass 'UIButton'
}

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

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

这是我的 UIViewController 类之一:

class CustomAlertView: UIViewController {

required init(coder aDecoder: NSCoder) {
fatalError("NSCoding not supported")
}

required override init() { // Initializer does not override a designated initializer from its superclass
super.init() // Must call a designated initializer of the superclass 'UIViewController'
}

override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
}
}

最佳答案

我的解决方案是快速修复,但我认为比 Apple 在发行说明中的​​目的要简单。有关更多信息,请搜索 19775924 http://adcdownload.apple.com//Developer_Tools/Xcode_6.3_beta_3/Xcode_6.3_beta_3_Release_Notes.pdf这里。 Apple 所说的是你创建一个 Objective-C 文件并扩展它(必须将它添加到头文件和所有文件中)并且它在“Xcode 6.3 beta 3 中的已知问题”上,所以我认为很容易做我所做的:

这就是我为 UIButton 修复它的方法:

class CustomButton : UIButton {
init() {
super.init(frame: CGRectZero)
}

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

这是我的 ViewController 之一(如果不需要,请删除 public):

public class GenericViewController: UIViewController {
public init() {
super.init(nibName: nil, bundle: nil)
}

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

我不使用 IB,所以我也有 UIView,因为我确实将 View 与 viewController 分开(如果不需要,请删除 public):

public class GenericMenuView: UIView {
public init() {
super.init(frame: CGRectZero)
}

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

我在 View 中特别需要这个,因为我有一个 setupViews 方法,我在 init 上调用的所有子类中重写了该方法。使用 AutoLayout 我不需要任何框架(所以我不使用 frame 参数覆盖 init)。

所以看来你必须放弃override。哦!并确保不要调用 self.init() 否则该类永远不会初始化(并且它会在一些内部超时后崩溃)。

关于ios - 初始化器不会覆盖其父类(super class)中的指定初始化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29031270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com