2015-04-09 11 views
7

Dostaję błąd w temacie po dzisiejszej aktualizacji do 8,3.Swift Musi zadzwonić do wyznaczonego inicjalizatora superklasy uiinputviewcontroller

Poniższy kod działał idealnie, ale nie jest już kompilowany. Czy ktokolwiek z was może mi pomóc?

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

Zastanawiam się, co oznaczony inicjator dla UIInputViewController? Nie "init (frame: CGRect)" Zakładam. ? – clearlight

+1

Czy pierwszy init nie jest init? Czy musisz dodać do tego słowo kluczowe typu convenience? Nie mam tego do nauki. Miałem kilka przypadków, w których musiałem się z tym zmagać przez jakiś czas, aby to rozgryźć. Na podstawie inicjalizatorów * masz *, zakładam, że czytasz Swift [dokumentacja] (https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Initialization.html) na ten temat jakiś punkt ... – clearlight

+1

Czy coś się zmieniło w dokumentach 8.3 dla UIInputViewController lub UIViewController? – clearlight

Odpowiedz

8

Miałem ten sam problem w następujący kod z NSWindowController:

init() { 
    super.init() 
} 

zmieniłem go na adres:

convenience init() { 
    self.init() 
} 

myślę, że Apple jest egzekwowanie wygodę inits ściślej niż wcześniej.

+0

z self.init() Otrzymuję ostrzeżenie "Nie można znaleźć przeciążenia dla 'init', który akceptuje dostarczone argumenty – Pedroinpeace

+0

Dodanie' convenience init() 'daje mi zły nadmiar.Pomóż mi pomóc –

+0

Może dlatego, że się odwołujesz 'self.init()', który się odwołuje? – Charlie

Powiązane problemy