2016-06-20 21 views
9

Ich habe einige ähnliche Fragen wie meine gesehen; Allerdings beziehen sich diese auf swift 2/1 und ich verwende derzeit swift 3. Ich glaube, Apple hat es leicht geändert.Entspricht nicht dem Protokoll 'NSCoding' - Swift 3

class Person: NSObject, NSCoding { 

    var signature: UIImage 

    init(signature: UIImage) { 
     self.signature = signature 
    } 

    required convenience init(coder aDecoder: NSCoder) { 
     let signature = aDecoder.decodeObject(forKey: "signature") as! UIImage 
     self.init(signature: signature) 
    } 

    func encodeWithCoder(aCoder: NSCoder) { 
     aCoder.encode(signature, forKey: "signature") 
    } 

} 

Sie werden feststellen, wie Swift 3 mich jetzt zwingt required convenience init( statt required init( zu verwenden. Vielleicht hat das etwas damit zu tun.

Wie kann ich dieses Problem beheben? Vielen Dank!

+0

Haben Sie in Xcode "Edit -> Convert -> To Current Swift Syntax" versucht? Das sollte das Problem automatisch beheben. –

Antwort

33

Die encode Methode in Swift 3 wurde

func encode(with aCoder: NSCoder) 

Wenn Sie die nicht entsprechen Fehler, den Sie herausfinden können, leicht zu bekommen, um

umbenannt, die

  • Press fehlen Methoden erforderlich ⌘ B, um den Code zu erstellen.
  • Drücken Sie , um den Problemnavigator anzuzeigen.
  • Klicken Sie auf das Dreiecksymbol vor der Ausgabezeile.
+0

Funktioniert perfekt. Ich werde in 6 Minuten einmal annehmen SO lass mich das tun :) – penatheboss

+0

Ich kann glauben, dass ich meine 2 kostbaren Tage nur dafür verschwendete .. Hasse dich schnell für solch eine Veränderung .. und liebe dich, Bruder, um meinen Arsch zu retten. :) Danke ein lotttt –