Bug Xcode 6: classe inconnue dans le fichier Interface Builder

J’ai mis à jour vers Xcode 6 beta 4 et maintenant mon application se bloque continuellement avec le message

Classe X inconnue dans le fichier Interface Builder.

Il se bloque parce que soi-disant Xcode ne peut pas trouver mes classes personnalisées que j’ai liées dans mon Storyboard mais cela montre qu’elles sont correctement liées dans l’interface Xcode.

Je suis certain que tout est lié correctement. Ma seule autre option est peut-être de supprimer l’intégralité du fichier de storyboard et de recommencer à zéro car il risque d’être corrompu.

Edit: Je voudrais également append que j’ai essayé de nettoyer, de réinitialiser le simulateur, de jouer avec les phases de construction, etc.

J’ai résolu ce problème en tapant la question. Je pensais que je répondrais à ma question et la laisserais ici à quiconque serait confronté à ce problème en utilisant Xcode 6 beta 4.

Pour résoudre ce problème, vous devez sélectionner chacun de vos objects de classe personnalisés dans Storyboard (cela inclut tous les affichages personnalisés, même les contrôleurs d’affichage personnalisés eux-mêmes).

Ensuite, avec ces objects sélectionnés, ouvrez l’inspecteur d’identité et sous “Classe personnalisée”, vous devriez voir l’option Module. Cliquez dans la zone de texte Module et appuyez sur Entrée.

C’est tout! Le module actuel pour tous mes objects personnalisés doit avoir été défini de manière incorrecte en interne dans Xcode 6 beta 4. Mais l’inspecteur n’en avait aucune indication visuelle.

Notez que si appuyer sur Entrée dans la zone de texte Module ne fonctionne pas, essayez de sélectionner la flèche à droite et sélectionnez manuellement votre module actuel, puis effacez la zone de texte et appuyez sur Entrée. Vous pouvez également essayer d’appuyer sur Entrée dans la zone de texte de la classe (bien que cela soit généralement nécessaire pour résoudre un problème différent).

Voici une image pour rendre les choses plus claires: entrer la description de l'image ici

Parfois, Xcode a manqué customModule="AppName" customModuleProvider="target"

Pour résoudre ce problème, ouvrez le storyboard en tant que code source et remplacez cette ligne:

  

pour ça:

  

J’ai eu ce problème après avoir renommé une classe rapide. Résolu en utilisant la directive @objc:

 @objc(ForumTopicListViewController) class ForumTopicListViewController 

Cela a fonctionné pour moi ..

Vérifiez votre source compilée, si ce fichier (par exemple, ViewController.m) est ajouté ou non, dans mon cas, le fichier ViewController n’a pas été ajouté et il m’a donné l’erreur.

entrer la description de l'image ici

Cela peut arriver dans n’importe quel Xcode au-dessus de 6.0. Cela m’est arrivé après avoir renommé certaines classes de ViewController dans le projet Swift (mais je suppose que cela se produira aussi avec Obj-C). Il vous suffit d’ouvrir le générateur d’interface, accédez à Identity Inspector of ViewController dont la classe a été renommée, sélectionnez class et appuyez sur Entrée. Cela réaffectera la classe renommée à ViewController sélectionné et réinitialisera également la valeur du module qui est perdue après avoir renommé la classe.

Mise à jour pour Xcode 8.1 (probablement 8.0):

Xcode 8.1 se bloque simplement. Simplement et de façon ennuyeuse, ça ne marche pas et n’imprime rien. Je poursuivais ce crash pendant une heure juste pour découvrir que c’était la même chose – une classe non assignée dans IB. Si vous obtenez des pannes fantômes, vérifiez d’abord IB pour les classes non atsortingbuées.

Parfois, le contrôleur que vous fournissez perd son abonnement cible à partir de l’application en cours. Dans ce cas, appuyer sur Entrée sur le champ “Module” ne fera rien. Accédez au contrôleur et assurez-vous que l’appartenance à la cible est définie sur l’application en cours.

Projet avec plusieurs cibles

Dans mon cas, je travaille sur un projet avec plusieurs cibles et le problème était “hériter de la cible” était décoché. La sélection de “hériter de la cible” a résolu mon problème

entrer la description de l'image ici

Ma réponse: définir un module personnalisé égal au nom du pod personnalisé (dans mon exemple – nom de classe personnalisé) comme sur la capture d’écran ci-jointe

Cette solution est pour un cas spécifique : pour les classes de vues personnalisées du framework Pod (ou Carthage ).

Infrastructure: XCode8, Swift3

entrer la description de l'image ici

Je l’ai corrigé en faisant exactement le contraire de ce que ChikabuZ a suggéré (merci de le signaler). Dans le fichier de storyboard, trouvez ceci:

  

et remplacez-le par ceci:

  

Je ne peux pas croire combien d’heures je perds à contourner les bugs dans le compilateur Swift et Xcode 6

J’ai rencontré ce problème dans Xcode 8 , pour le résoudre j’ai dû modifier le storyboard dans l’éditeur de texte.

En général, recherchez votre contrôle et supprimez customModule et customModuleProvider de l’entité de contrôle.

J’ai fait un tour pour moi.

En sélectionnant le Module approprié pour ma Custom Class j’ai résolu ce problème.

C’est ici :

entrer la description de l'image ici

J’ai rencontré ce problème dans Xcode 6.1 lorsque j’ai supprimé Main.storyboard , le fichier LaunchScreen.xib et les classes ViewController par défaut de mon projet.

Je l’ai corrigé en supprimant les entrées du Launch Screen File et de l’ Main Interface d’ Info.plist

J’ai eu le même problème.

Dans mon cas, Xcode n’ajoutait pas ma classe personnalisée à: Target> Build Phase> Comstack Sources.

Donc, je vous recommande de vérifier si votre CustomClass.m est là.

entrer la description de l'image ici

J’espère que ceci vous aide.

Je l’ai cherché partout sur Google. Aucune des réponses ne fonctionne pour moi tant que je n’ai pas rencontré 1 mec qui m’a demandé de déplacer mon dossier de projet sur le bureau. Cela a juste fonctionné automatiquement. Apparemment, si vous projetez un dossier dans de nombreux dossiers, XCODE se casse.

Vérifiez si votre classe a la bonne adhésion cible .

Ces étapes fonctionnent pour moi.

1) Effacer les données dérivées.
2) Supprimer les fichiers .h et .m
3) Créez à nouveau des fichiers .h et .m

J’ai résolu ce problème en ouvrant mon fichier storyboard en tant que code source et en utilisant la commande-F pour rechercher ma classe inconnue et supprimer la classe personnalisée qui lui est associée.

Ce que dit @gfrs est correct, vous devez définir le module. Cependant, une fois, j’ai rencontré un problème que ma classe n’était pas répertoriée dans le menu déroulant Class . Finalement, j’ai supprimé le fichier rapide, relancé Xcode et recréé le fichier. Enfin, le cours était répertorié et pouvait être utilisé dans Storyboard.

Jetez également un coup d’oeil à cette réponse , qui ressemble à résoudre le «vrai» problème que j’ai rencontré.

J’ai résolu ce problème en tapant le nom du module (malheureusement, la liste déroulante ne montrera rien …) dans la classe personnalisée de l’inspecteur d’identité pour tous les contrôleurs et vues View.

Vous devrez peut-être également indiquer le fournisseur cible. Pour atteindre cet objective, vous pouvez ouvrir le storyboard en mode code source et append l’atsortingbut “customModuleProvider” dans les deux crochets ViewController et View.

Ma solution (Xcode 8.1 Swift 3.0):

Classe xxx inconnue dans le fichier Interface Builder.

Ouvrez StoryBoard comme code source et recherchez xxx . Supprimer l’atsortingbut qui contient la valeur xxx . Construire et exécuter.

Dans mon cas, la classe référencée dans le Storyboard / xib ne comportait pas d’ adhésion à la cible .

Pour corriger, atsortingbuez .m fichiers .h et .m cette classe la même adhésion à la cible que vos autres classes.

Aucun ensemble de membres cible.

Dans mon cas, j’ai ajouté un indicateur -ObjC aux Other Linker Flags indicateurs de -ObjC dans les parameters du projet pour que cela fonctionne. J’ai aussi essayé avec le drapeau -all_load et ça a bien fonctionné aussi.

entrer la description de l'image ici

J’ai fait face au problème lorsque j’ai porté le storyboard du projet Swift au projet Objective-c, remarquant la réponse de vvkuznetsov , il est apparu que les deux projets utilisaient le même identifiant. I “Produit -> Nettoyer” et appuyez sur la touche Entrée dans le champ de texte Module et Classe. le problème a disparu.

Ma solution consistait à supprimer @objc de la définition de classe personnalisée.

J’ai corrigé cela en fonction de ce que Laura proposait, mais je n’avais pas besoin de recréer les fichiers.

En utilisant XCode 4, dans le navigateur de projet, sélectionnez le fichier .m contenant la classe dont il se plaint.

Allez dans Affichage-> Utilitaires-> Afficher l’inspecteur de fichiers (cela affichera l’inspecteur de fichiers à droite, avec ces informations sur le fichier .m)

Ouvrez la section Appartenance à la cible et assurez-vous que votre cible est sélectionnée pour ce fichier .m

Lorsque j’ai ajouté mon fichier .m à mon projet, il ne l’a pas ajouté à ma cible par défaut pour une raison quelconque et cela m’a amené à obtenir l’erreur que vous avez mentionnée.

Ce qui n’a fonctionné que pour moi, c’est d’append le nom du module au fichier xib …

Sooo, les fichiers xib ressemblent à ceci:

 mymodule.MyViewController.xib (Module being the name of the proyect, usually) 

HORRIBLE solution à mon avis, mais c’est censément comment Apple veut que nous le fassions maintenant.

Cette question montre 3 remises en question possibles dans la version bêta 4 … apparemment, Apple n’a pas été très utile dans cette situation, selon certains, car ils l’appellent “Travailler comme prévu”.

J’ai eu le même problème avec Xcode Version 6.1 (6A1052d). Je pense que le problème apparaît si vous avez renommé votre projet App / Xcode.

Ma solution consistait à append manuellement le nom du module dans le générateur d’interface.

J’ai eu ce problème après avoir ajouté une nouvelle cible, puis créé une nouvelle classe en utilisant la boîte de dialog “Nouveau fichier” mais échoué accidentellement à vérifier la nouvelle cible ainsi que la cible d’origine dans la boîte de dialog de création. cible d’origine. La solution consistait à supprimer les fichiers source (supprimer uniquement la référence), puis à les append à l’aide de «Ajouter des fichiers», en vérifiant cette fois les deux cibles.

La solution était différente pour moi. Vous devez append le .m de la classe aux sources compilées de la phase de construction.

J’espère que cela t’aides!

Sélectionnez votre fichier de classe inconnu, ouvrez l’onglet Inspecteur de fichiers, vérifiez votre nom cible dans Target Membership . Voilà.