2015-04-09 13 views
7

Ricevo l'errore nell'oggetto dopo l'aggiornamento di questa mattina a 8.3.Swift Deve chiamare un inizializzatore designato della superclasse uiinputviewcontroller

Il codice sotto utilizzato per funzionare perfettamente, tuttavia non viene compilato più. Qualcuno di voi può aiutarmi?

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

Mi chiedo quale sia l'inizializzatore designato per UIInputViewController? Non 'init (frame: CGRect)' presumo. ? – clearlight

+1

Il primo init non è un init conveniente? Devi aggiungere parole chiave di convenienza ad esso? Non ne ho una scienza. Ho avuto alcuni casi in cui ho dovuto lottare per un po 'per capirlo. Sulla base degli inizializzatori che * hai *, presumo che tu abbia letto la [documentazione] Swift (https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Initialization.html) sull'argomento in qualche punto ... – clearlight

+1

Qualcosa è cambiato nei documenti 8.3 per UIInputViewController o UIViewController? – clearlight

risposta

8

Ho avuto lo stesso problema sul seguente codice con NSWindowController:

init() { 
    super.init() 
} 

ho cambiato in:

convenience init() { 
    self.init() 
} 

Sto pensando che Apple è far rispettare la convenienza INIT più strettamente di prima.

+0

con self.init() I warning "Impossibile trovare un overload per" init "che accetta gli argomenti forniti – Pedroinpeace

+0

L'aggiunta di' convenience init() 'mi sta dando un brutto eccesso. Please help. –

+0

Forse perché stai facendo riferimento 'self.init()' che fa riferimento a se stesso? – Charlie

Problemi correlati