Je sais qu'il y a beaucoup de questions sur ce sujet mais j'ai essayé la plupart d'entre elles pour essayer de le résoudre sans succès.
le problème: au début, je ne pouvais pas ajouter ma classe à partir de l'éditeur adjoint car la classe personnalisée ne l'a pas récupérée.
Maintenant, j'essaie de connecter mes boutons, vues, etc. à ses prises. Il semble qu'ils soient connectés, mais lors de l'exécution de l'application et de l'ouverture de ce contrôleur de vue, l'application se bloque et le débogueur imprime: "Classe inconnue xxx dans le fichier Interface Builder." Et que "Cette classe n'est pas clé de codage de valeur conforme pour la clé btnMenu. "
J'ai vérifié:
J'ai même essayé de redémarrer mon mac et bien sûr pas de succès.
quelqu'un peut-il éclairer un peu la lumière ici? merci.
Je viens de vivre cela avec une sous-classe UIViewController (avec Xcode 9 beta 2 et Swift 4) et la solution consistait à cocher «Hériter de la cible», où je définissais la classe personnalisée dans IB.
Si votre vue se trouve dans un fichier .bundle
(par exemple, pour une bibliothèque framework/static) copiée vers une cible différente, vous voudrez définir une cible de module explicite pour chaque classe xib/storyboard plutôt que de l'hériter. la cible qui l'accueille.
J'ai eu ce problème avec un UIView personnalisé que je testais, où UIView était dans un framework. J'avais créé une application simple, créé un UIView dans le ViewController par défaut du Storyboard et défini sa classe sur MyCustomView. J'ai toujours eu l'erreur "Classe inconnue dans le constructeur d'interface" lors du lancement de l'application. J'importais mon framework, et j'ai vérifié dans le produit construit que le framework était là.
Le problème était que mon code d'application de test n'a jamais utilisé le framework. Même si le Storyboard en a parlé, je suppose qu'il n'a jamais été chargé. Lorsque j'ai ajouté un [MyCustomView load];
au code de l'application de test, tout a fonctionné.
J'ai rencontré cette erreur parce que j'avais accidentellement enregistré mon fichier de classe dans le dossier Base.lproj lorsque je l'avais créé.
J'ai corrigé l'erreur en cliquant avec le bouton droit sur le fichier dans le Navigateur de projet et en supprimant la référence. J'ai ensuite déplacé le fichier via le Finder dans le bon dossier. Puis j'ai cliqué avec le bouton droit de la souris sur le groupe principal dans le navigateur de projet, puis sur Add Files to "GroupName"...
, sélectionné la classe et cliqué sur le bouton Add
.
Après cela, l'erreur est partie.
Ce que @Anthony Scott a mentionné est vrai tant que Framework_A n'est pas dépendant de Framework_B et que la classe provient de Framework_B :) Ensuite, vous devez désélectionner la case à cocher et fournir le module qui contient la classe donnée. Merci pour la question btw. J'utilise Common Framework pour d'autres frameworks et cela m'a aidé à le comprendre;) Pour ceux qui développent des frameworks personnalisés Cocoa Touch, cela peut être utile.
ok donc je ne sais pas comment et pourquoi, mais j’ai fait (ENCORE) ce que j’avais déjà essayé avant qui est:
maintenant, il semble que Xcode connaisse ma classe .... Je ne sais toujours pas quel était le problème, mais je suppose que cela a quelque chose à voir avec l'éditeur de liens.
Après avoir coché la case "Hériter le module de la cible" dans la classe personnalisée de la section View Controller, cela fonctionne correctement. Peut suivre l'image.
Pour trouver cela> Sélectionnez votre bouton jaune view controller> puis cliquez sur "Afficher l'inspecteur d'identité"> puis cochez la coche intitulée "Inherit Module From Target".
Si vous essayez d'affecter une classe à un ViewController, assurez-vous que la classe que vous avez créée hérite d'un UIViewController. La seule raison pour laquelle xCode ne reconnaîtra pas votre classe est un type d'instance différent, disons, peut-être un type UITableViewController.
Veuillez vérifier l'héritage de votre classe en premier.
Vous devez instancier le contrôleur de vue avec la classe personnalisée. Sans cela, vous pourriez avoir l'erreur.
self.storyboard!.instantiateViewController(withIdentifier: "namePage") as! EmailAndPassword
Vérifiez le nom de votre classe. Assurez-vous qu'il correspond à la classe à laquelle vous avez affecté votre ViewController dans l'inspecteur de propriétés.
rien de tout cela n'a aidé. Mon problème était que j'avais créé des storyboards personnalisés et ajouté des classes personnalisées. Mais j'ai oublié de prendre la flèche du contrôleur de vue initiale du storyboard principal généré automatiquement et j'ai changé le storyboard initial en mon storyboard personnalisé qui l'a corrigé pour moi.