2016-06-20 30 views
9

Ho visto diverse domande simili alle mie; tuttavia, quelli sono relativi a swift 2/1 e attualmente sto usando swift 3. Credo che Apple lo abbia cambiato leggermente.Non conforme al protocollo '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") 
    } 

} 

Noterete come Swift 3 ora mi costringe a usare required convenience init( invece di required init(. Forse questo ha qualcosa a che fare con questo.

Come posso risolvere questo problema? Grazie!

+0

Hai provato "Modifica -> Converti -> Sintassi Swift corrente" in Xcode? Questo dovrebbe risolvere automaticamente il problema. –

risposta

33

Il metodo encode a Swift 3 è stato rinominato in

func encode(with aCoder: NSCoder) 

Quando si ottiene il non sono conformi errore si può facilmente scoprire quali necessari metodi mancano

  • Press ⌘ B per creare il codice.
  • Premere ⌘4 per visualizzare il problema navigator.
  • Fare clic sul triangolo di apertura di fronte alla riga di emissione.
+0

Funziona perfettamente. Accetterò in 6 minuti una volta SO, facciamolo così :) – penatheboss

+0

Posso credere di aver sprecato i miei 2 preziosi giorni solo per questo .. Ti odio per un tale cambiamento .. e ti amo per aver salvato il mio culo. :) Grazie a lotttt –

Problemi correlati