2015-04-09 11 views
7

Ich bekomme den Fehler im Betreff nach dem heutigen Upgrade auf 8.3.Swift Muss einen designierten Initialisierer der Superklasse aufrufen uiinputviewcontroller

Der folgende Code funktionierte einwandfrei, kompiliert jedoch nicht mehr. Kann jemand von euch mir bitte helfen?

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

Ich frage mich, was der designierte Initialisierer für UIInputViewController? Nicht 'init (frame: CGRect)' nehme ich an. ? – clearlight

+1

Ist nicht die erste Init eine Komfort-Init? Müssen Sie ein Convenience-Keyword hinzufügen? Ich habe es nicht mit einer Wissenschaft zu tun. Ich hatte einige Fälle, in denen ich mich eine Weile damit herumschlagen musste, um es herauszufinden. Basierend auf den Initializern, die Sie * haben *, nehme ich an, Sie lesen die Swift [Dokumentation] (https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Initialization.html) zum Thema unter Irgendein Punkt ... – clearlight

+1

Hat sich etwas in den 8.3 Dokumenten für UIInputViewController oder UIViewController geändert? – clearlight

Antwort

8

hatte ich das gleiche Problem auf den folgenden Code mit NSWindowController:

init() { 
    super.init() 
} 

ich es geändert:

convenience init() { 
    self.init() 
} 

Ich denke, dass Apple Bequemlichkeit inits mehr erzwingt streng als vorher.

+0

with self.init() Ich bekomme eine Warnung "Konnte keine Überladung für 'init' finden, die die angegebenen Argumente akzeptiert – Pedroinpeace

+0

Das Hinzufügen von' convenience init() 'gibt mir einen schlechten Überschuss. Bitte helfen. –

+0

Vielleicht weil Sie verweisen 'self.init()', das sich selbst referenziert? – Charlie