Chargement ViewController de fichier xib
J'ai eu un MyViewController.swift
et un MyViewController.xib
la présentation de la mise en page de MyViewController.
J'ai essayé différentes méthodes pour charger ce point de vue contrôleur, y compris:
//1
let myVC = UINib(nibName: "MyViewController", bundle:
nil).instantiateWithOwner(nil, options: nil)[0] as? MyViewController
//2
let myVC = NSBundle.mainBundle().loadNibNamed("MyViewController", owner: self, options: nil)[0] as? MyViewController
//3
let myVC = MyViewController(nibName: "MyViewController", bundle: nil)
Le troisième est le seul succès de l'initialisation, mais les deux dernières sont à l'origine de l'erreur:
Résiliation d'application en raison de uncaught exception 'NSUnknownKeyException',
raison: '[ setValue:forUndefinedKey:]: ce
la classe n'est pas la valeur de la clé de codage conforme à la clé XXX.
Quel est le problème avec ces méthodes de chargement?
pouvez-vous voir le code complet
Vérifier tous les points de vente que vous avez créé et connecté avec les composants. Assurez-vous qu'il ne devrait pas y avoir de point d'exclamation dans le
bluenowhere: avez-vous trouvé votre réponse?
Je crois que les deux premières méthodes d'initialiser votre "MyViewController" classe UIViewController et ne pas raccorder les prises et les actions correctement, de sorte que l'application se bloque en essayant de les trouver. L'initialisation avec votre classe, constructeur de crochets jusqu'à la classe de points de vente à la plume de sorte que tout fonctionne comme il se doit.
Vérifier tous les points de vente que vous avez créé et connecté avec les composants. Assurez-vous qu'il ne devrait pas y avoir de point d'exclamation dans le
Outlets
dans connection inspector
dans votre .xib
fichier.bluenowhere: avez-vous trouvé votre réponse?
Je crois que les deux premières méthodes d'initialiser votre "MyViewController" classe UIViewController et ne pas raccorder les prises et les actions correctement, de sorte que l'application se bloque en essayant de les trouver. L'initialisation avec votre classe, constructeur de crochets jusqu'à la classe de points de vente à la plume de sorte que tout fonctionne comme il se doit.
OriginalL'auteur bluenowhere | 2016-05-05
Vous devez vous connecter pour publier un commentaire.
Swift 3
ou pousser manette de navigation
Genre de! C'est la bonne réponse à la question "Comment puis-je charger mise un ViewController à partir d'un fichier XIB'. Cependant, la question est ambiguë que l'OP ne semble pas distinguer entre (1) le chargement de la page (à Vue) d'un par programme instancié ViewController à partir d'un XIB, et (2) le chargement du ViewController exemple lui-même de la XIB. AechoLiu réponse est la bonne réponse à la deuxième interprétation 🙂
juste à point!
si votre vc nom est le même que le fichier xib vous pouvez utiliser (nibName: néant, bundle: néant) et il fonctionnera
OriginalL'auteur Marcos Reboucas
Avis de la
File's Owner
. Dans votre cas, leFile's Owner
doit êtreMyViewController
, ou c'estsub-class
.Et les codes ci-dessous, si elle s'exécute dans la classe
Foo
.Passer
self
commeowner
. Ainsi, laFile's Owner
estFoo
, pasMyViewController
. Ensuite, pourFoo
la classe, ceux quiIBOutlet
ne peut pas être connecté àFoo
, ceuxIBOutlet
sont pourMyViewController
. Donc, il se bloque.OriginalL'auteur AechoLiu
Le problème n'est pas avec les méthodes...vous avez sans doute gardé une prise de courant(XXX) connectés à certains uielement et que vous avez supprimé à partir du contrôleur correspondant...je suis l'ajout de l'exemple ci-dessous...
le bouton ci-dessus est connecté à un contrôleur maintenant, mais quand j'ai un commentaire de sortie
mon application se bloque
donc, essayez de trouver la sortie(xxx) qui est absent de viewcontroller, mais est dans le fichier xib.Espérons que cela aide 🙂
OriginalL'auteur sanman
J'ai eu le même problème. L'généré automatiquement xib avait une UIView. Vous devez supprimer les afficher, ajouter une nouvelle vue contrôleur à la xib, définir l'affichage de contrôleur de classe à celui que vous voulez, puis connectez les points de vente. Après tout cela, vous pouvez utiliser les codes fournis ci-dessus pour obtenir une instance de ce point de vue contrôleur, comme ceci:
OriginalL'auteur Archangel
Essayer de code ci-dessous,
//1
OU
//2
Cela fonctionne.
Oui, comme vous pouvez voir les différentes compétences pour l'écriture de code. Un certain temps il ne permettra pas à initialiser dans l'une des lignes de code.
OriginalL'auteur Jigar Tarsariya