Je vais commencer cette réponse par la direction opposée : que faire si vous voulez sauvegarder l'état de votre vue sur le disque ? C'est ce qu'on appelle sérialisation . L'inverse est désérialisation - restauration de l'état de l'objet à partir du disque.
El NSCoding
définit deux méthodes pour sérialiser et désérialiser les objets :
encodeWithCoder(_ aCoder: NSCoder) {
// Serialize your object here
}
init(coder aDecoder: NSCoder) {
// Deserialize your object here
}
Alors pourquoi est-il nécessaire dans votre classe personnalisée ? La réponse est l'Interface Builder. Lorsque vous faites glisser un objet sur un storyboard et le configurez, Interface Builder sérialise l'état de cet objet sur le disque, puis le désérialise lorsque le storyboard apparaît à l'écran. Vous devez indiquer à Interface Builder comment procéder. Au minimum, si vous n'ajoutez pas de nouvelles propriétés à votre sous-classe, vous pouvez simplement demander à la super-classe de faire l'emballage et le déballage pour vous, d'où l'utilisation de l'option super.init(coder: aDecoder)
appel. Si votre sous-classe est plus complexe, vous devez ajouter votre propre code de sérialisation et de désérialisation pour la sous-classe.
Cela contraste avec l'approche de Visual Studio, qui consiste à écrire du code dans un fichier caché pour créer l'objet au moment de l'exécution.
5 votes
Cette réponse vous aidera stackoverflow.com/questions/24036393/ Merci.
2 votes
Si vous sous-classez un objet qui implémente la fonction
NSCoding
alors vous devez implémenter cet initialisateur, puisqu'il est requis pour les classes qui implémentent la fonctionNSCoding
. Vous devez au moins appeler la méthode init de la superclasse. Si la méthodeNSCoder
contient des propriétés codées pour votre classe, vous pouvez utiliser cette méthode pour récupérer ces propriétés.