Quelqu'un peut-il vous expliquer s'il vous plaît quand utiliser l'initwithnibname et quand utiliser InitwithCoder? p>
3 Réponses :
de la documentation d'Apple: strong> p>
InitwithCoder code un objet d'archivage. Un codeur charge l'objet de le faire en invoquant EncodewithCoder: ou initwithcoder :. EncodewithCoder: demande à l'objet d'encoder ses variables d'instance au codeur fourni ... p>
initwithnibname renvoie un objet NSNIB initialisé dans le fichier NIB dans le faisceau spécifié. Une fois que le fichier NIB a été chargé, l'objet NSNIB utilise la carte de ressources de l'ensemble pour localiser des ressources supplémentaires référencées par le NIB. Si vous avez spécifié NIV pour le paramètre Bundle, l'objet NSNIB recherche ces ressources dans le paquet associé à la classe du propriétaire du fichier NIB. Si le fichier NIB n'a pas de propriétaire, l'objet NSNIB recherche des ressources supplémentaires dans le forfait principal de l'application. P>
Le premier est utilisé pour encoder des objets individuels dans votre code, ce dernier est utilisé pour extraire un fichier NSNIB contenant des objets de ressources. strong> p>
Quoi qu'il en soit, pour récapituler: vous impliqueriez Il y a une très grande sur-vision de initwithnibname: code> est généralement utilisé avec un objet de contrôleur d'affichage. L'idée est que vous avez un fichier NIB (ou XIB, même chose) qui a un uiview code> (ou nsview code>) Vous avez déjà conçu dans l'interface Builder. Lorsque votre contrôleur d'affichage lance, il dispose d'une propriété code> code> et de la sortie que vous devriez approcher vous-même - sauf que vous l'avez déjà conçue dans IB. Donc, ce constructeur vous permet de définir le nouvel objet du contrôleur et de le dire dans lequel le fichier NIB recherche sa vue. Discussion sur le câblage de votre NIB elle-même pour vous assurer que cela réussit est un peu au-delà du sujet ici. P>
initwithcoder: code> a une autre tâche. Lorsque vous avez sérialisé un objet à l'aide de Encodewithcoder: code>, vous devez éventuellement avoir besoin de désériorialiser (ou, de "décodage") que des données pour le remettre dans un objet de votre classe. P>
Encodewithcoder: code> et initwithcoder: code> sur votre classe uniquement si vous souhaitez que votre objet prend en charge le nscoding code> protocole. Vous utilisez initwithnibname: code> (Généralement, vous ne l'implémentez pas vous-même) lorsque vous souhaitez définir un objet pouvant initialiser ses propriétés avec des objets archivés dans un fichier NIB. P>
nscoding code> ici . p>
Vous devriez préférer -Initwithcoder: code> à -Initwithnibname code> car seul le premier est appelé lors du chargement de la vue Storyboard fort>. P>.