Ich werde diese Antwort aus der entgegengesetzten Richtung starten: Was, wenn Sie den Zustand Ihrer Ansicht auf der Festplatte speichern möchten? Dies ist bekannt als Serialisierung. Die Umkehrung ist Deserialisierung - Wiederherstellung des Zustands des Objekts von der Festplatte.
Das NSCoding
Protokoll definiert zwei Methoden zur Serialisierung und Deserialisierung Objekte:
encodeWithCoder(_ aCoder: NSCoder) {
// Serialize your object here
}
init(coder aDecoder: NSCoder) {
// Deserialize your object here
}
Warum ist es in der benutzerdefinierten Klasse benötigt? Die Antwort ist Interface Builder. Wenn Sie ein Objekt auf ein Storyboard ziehen und es konfigurieren, serialisiert Interface Builder den Status dieses Objekts auf der Festplatte und deserialisiert es anschließend, wenn das Storyboard auf dem Bildschirm angezeigt wird. Sie müssen Interface Builder mitteilen, wie Sie diese ausführen. Wenn Sie Ihrer Unterklasse keine neuen Eigenschaften hinzufügen, können Sie einfach die Oberklasse bitten, das Packen und Entpacken für Sie durchzuführen, daher der Aufruf super.init(coder: aDecoder)
. Wenn Ihre Unterklasse komplexer ist, müssen Sie einen eigenen Serialisierungs- und Deserialisierungscode für die Unterklasse hinzufügen.
Dies steht im Gegensatz zu der Visual Studio-Ansatz, Code in eine versteckte Datei zu schreiben, um das Objekt zur Laufzeit zu machen.
Diese Antwort wird Ihnen helfen http://stackoverflow.com/questions/24036393/fatal-error-use-of-unimplemented-initializer-initcoder-for-class Vielen Dank –
Wenn Sie ein Objekt ableiten, das 'NSCoding' implementiert dann müssen Sie diesen Initialisierer implementieren, da er für Klassen benötigt wird, die 'NSCoding' implementieren. Sie müssen mindestens die Superklassen-Init-Methode aufrufen. Wenn der "NSCoder" codierte Eigenschaften für Ihre Klasse enthält, können Sie diese Methode verwenden, um diese wiederherzustellen – Paulw11
Versuchen Sie zu suchen. Diese Frage wurde hier oft beantwortet. – matt