因此,我刚刚升级到Xcode 6.3 Beta 3,出现了许多与以下内容有关的错误:
初始化程序不会覆盖其父类中的指定初始化程序。
override init() { super.init() }
例如,这是一个UIButton类:
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课程之一:
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。苹果公司所说的是您创建一个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,因为我确实将视图与viewController((如果不需要的话,删除公共的)视图)分开:
UIView
viewController
public class GenericMenuView: UIView { public init() { super.init(frame: CGRectZero) } public required init(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } }
我在视图中特别需要此setupViews方法,因为我有一个在init上调用的所有子类中都覆盖的方法。并且使用AutoLayout我不需要任何框架(因此,我不会使用frame参数覆盖init)。
setupViews
所以看来你必须放弃override。哦! 并确保不调用self.init()该类或该类从未初始化(并且在某些内部超时后崩溃)。
override
self.init()