Inizierò questa risposta dalla direzione opposta: cosa succede se si desidera salvare lo stato della vista su disco? Si tratta di una serializzazione . Il contrario è la deserializzazione - il ripristino dello stato dell'oggetto dal disco.
Il protocollo definisce NSCoding
2 metodi per serializzare e deserializzare gli oggetti:
encodeWithCoder(_ aCoder: NSCoder) {
// Serialize your object here
}
init(coder aDecoder: NSCoder) {
// Deserialize your object here
}
Allora perché è necessario in classe personalizzata? La risposta è Interface Builder. Quando si trascina un oggetto su uno storyboard e lo si configura, Interface Builder serializza lo stato di tale oggetto su disco, quindi deserializza quando lo storyboard viene visualizzato sullo schermo. È necessario comunicare a Interface Builder come eseguire tali operazioni. Per lo meno, se non aggiungi nuove proprietà alla sottoclasse, puoi semplicemente chiedere alla superclasse di fare il pacco e il disimballaggio per te, quindi la chiamata super.init(coder: aDecoder)
. Se la sottoclasse è più complessa, è necessario aggiungere il proprio codice di serializzazione e deserializzazione per la sottoclasse.
Questo è in contrasto con l'approccio di Visual Studio, che è quello di scrivere il codice in un file nascosto per rendere l'oggetto in fase di esecuzione.
fonte
2016-07-15 03:03:18
Questa risposta ti aiuterà http://stackoverflow.com/questions/24036393/fatal-error-use-of-unimplemented-initializer-initcoder-for-class Grazie –
Se sottoclassi un oggetto che implementa 'NSCoding' quindi è necessario implementare questo inizializzatore, poiché è richiesto dalle classi che implementano 'NSCoding'. Devi almeno chiamare il metodo di superclasse init. Se 'NSCoder' contiene proprietà codificate per la tua classe, allora puoi usare questo metodo per recuperare quelle – Paulw11
Prova a cercare. Questa domanda ha ricevuto risposta molte volte qui. – matt