Xcode 6 Bug: Classe inconnue dans le fichier Interface Builder

j'ai mis à jour en Xcode 6 beta 4 et maintenant mon application crash en continu avec le message

Inconnu de la classe de X dans Interface Builder fichier.

s'écrase parce que soi-disant Xcode ne peut pas trouver mes classes personnalisées que j'ai liées dans mon Storyboard mais il montre qu'elles sont correctement liées dans l'interface Xcode.

je suis sûr que tout est lié correctement. Ma seule autre option pourrait être supprimez tout le fichier storyboard et commencez à partir de zéro parce qu'il pourrait être corrompu en quelque sorte.

Edit: je voudrais aussi ajouter que j'ai essayé le nettoyage, rebrancher simulateur, jouer avec les phases de construction, etc. Rien de tout cela fonctionne.

532
demandé sur Cœur 2014-07-24 08:09:35
la source

30 ответов

j'ai résolu ce problème en tapant la question. J'ai pensé que je répondrais à ma question et la laisserais ici pour n'importe qui d'autre qui pourrait faire face à ce problème en utilisant Xcode 6 beta 4.

pour résoudre ce problème, vous devez sélectionner chacun de vos objets de classe personnalisés dans Storyboard (Cela inclut toutes les vues personnalisées, même les contrôleurs de vue personnalisés eux-mêmes).

alors avec ces objets sélectionnés, ouvrez l'inspecteur d'identité et sous "Custom Class" vous devrait voir L'option Module. Cliquez à l'intérieur de la zone de texte du Module et appuyez sur Entrée.

C'est ça! Le module courant pour tous mes objets personnalisés doit avoir été mal défini en interne dans Xcode 6 beta 4. Mais il n'y avait aucune indication visuelle à ce sujet dans l'inspecteur.

notez que si appuyer sur Entrée à L'intérieur de la zone de texte du Module ne fonctionne pas, essayez de sélectionner la flèche à droite et sélectionner manuellement votre module actuel, puis effacer la zone de texte et appuyez sur entrée. Vous pouvez également essayer d'appuyer sur Entrée à l'intérieur de la zone de texte de la classe (bien que ce soit habituellement pour résoudre un problème différent).

Voici une image pour clarifier les choses: enter image description here

1302
répondu Epic Byte 2016-06-04 20:54:19
la source

parfois manqué Xcode customModule="AppName" customModuleProvider="target"

pour le corriger, ouvrir storyboard comme code source et remplacer cette ligne:

<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass"
sceneMemberID="viewController">

à ceci:

<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass"
 customModule="AppName" customModuleProvider="target" sceneMemberID="viewController">
93
répondu ChikabuZ 2015-02-14 01:41:36
la source

j'ai eu ce problème après avoir renommé une classe swift. Résolu en utilisant la directive @objc:

@objc(ForumTopicListViewController) class ForumTopicListViewController
67
répondu user1760527 2014-09-30 00:47:41
la source

ça a marché pour moi..

Vérifiez votre source compilée, si ce fichier(E. G; ViewController.m) est ajouté ou non, dans mon cas le fichier ViewController n'a pas été ajouté, donc il me donnait l'erreur..

enter image description here

52
répondu mavericks 2015-04-06 12:46:25
la source

cela peut se produire 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). Vous avez juste à ouvrir le constructeur d'interface, aller à L'Inspecteur D'identité de ViewController qui a eu sa classe renommée, sélectionner la classe et appuyez sur Entrée. Cela va réattribuer la classe renommée à ViewController sélectionné et aussi réinitialiser la valeur du Module qui se perd après avoir renommé la classe.

mise à jour pour Xcode 8.1 (probablement 8.0 aussi):

Xcode 8.1 s'écrase. Tout simplement et de manière agaçante se brise et n'imprime rien. Je chassais ce crash fantôme pendant une heure juste pour découvrir que c'était la même chose - classe non assignée en IB. Si vous avez des accidents fantômes, Vérifiez deux fois IB pour les classes non attribuées en premier.

43
répondu jovanjovanovic 2016-12-02 14:04:46
la source

parfois le contrôleur que vous fournissez perd son appartenance cible de l'application courante. Dans ce cas, appuyer sur entrée dans le champ "Module" ne fera rien. Allez au controller et assurez-vous qu'il a l'adhésion cible fixée à l'application courante.

31
répondu Furqan Khan 2015-01-01 00:02:19
la source

projet à Objectifs multiples

dans mon cas, je travaille sur un projet avec de multiples cibles et la question était" hériter de la cible " était incontrôlée. Sélectionner "hériter de la cible" résolu mon problème

enter image description here

30
répondu Muhammad Nayab 2018-01-15 08:53:11
la source

ma réponse: définir le Module personnalisé égal au nom du module personnalisé (dans mon exemple - nom de classe personnalisé) comme sur la capture d'écran attachée

Cette solution est pour un cas spécifique : pour custom vues classes de Pod (ou Carthage ) cadre.

Infrastructure: Xcode8, Swift3

enter image description here

25
répondu Tamara 2017-03-13 09:13:47
la source

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

<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass" customModule="AppName" customModuleProvider="target" sceneMemberID="viewController">

et le remplacer par ce qui suit:

<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass" sceneMemberID="viewController">

Je n'arrive pas à croire combien d'heures je perds à contourner les bogues dans le compilateur Swift et Xcode 6

15
répondu Orlin Georgiev 2015-05-14 12:05:53
la source

j'ai fait face à ce problème dans Xcode 8 , pour le résoudre j'ai dû modifier storyboard dans l'éditeur de texte.

en général, cherchez votre contrôle et supprimez customModule et customModuleProvider de l'entité de contrôle.

M'a fait un tour.

13
répondu George Maisuradze 2017-02-21 16:32:42
la source

Sélectionner le bon Module pour mon Custom Class j'ai résolu ce problème .

le voici:

enter image description here

13
répondu roy 2017-10-21 09:45:25
la source

j'ai affronté ce problème dans Xcode 6.1 quand j'ai enlevé Main.storyboard , le fichier LaunchScreen.xib et les classes par défaut ViewController de mon projet.

Je l'ai fixé en supprimant les entrées Launch Screen File et Main Interface de Info.plist

9
répondu Vinay Jain 2015-02-05 18:48:52
la source

j'ai eu le même problème.

dans mon cas, Xcode n'ajoutait pas ma classe personnalisée à: Target > Build Phase > compiler les Sources.

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

enter image description here

j'espère que cela vous aide.

9
répondu rcmcastro 2016-04-26 10:07:27
la source

vérifiez si votre classe A le droit Target Membership .

9
répondu Jakub Truhlář 2016-10-01 13:45:58
la source

j'ai cherché ça sur Google. Aucune réponse fonctionné pour moi jusqu'à ce que j'ai rencontré 1 mec qui m'a demandé de déplacer mon dossier de projet de bureau. Ça a fonctionné automatiquement. Apparemment, si vous avez un dossier de projet en profondeur dans de nombreux dossiers, XCODE se casse.

8
répondu VBaarathi 2015-07-10 11:09:26
la source

ces étapes travaillent pour moi.

1) Données Clairement Dérivées.

2) Supprimer .h et .m les fichiers

3) Create .h et .m de Nouveau les fichiers

7
répondu ARWIN 2015-07-26 22:01:33
la source

j'ai résolu cela en ouvrant mon fichier storyboard comme code source et en utilisant la commande-F pour rechercher ma classe inconnue et supprimer la classe personnalisée qui lui est associée.

7
répondu Wraithseeker 2015-10-01 14:37:13
la source

ce que @gfrs a dit est correct, vous devez configurer le Module. Cependant, une fois, j'ai rencontré un problème que ma classe n'était pas listée dans la liste déroulante Class . Finalement, j'ai supprimé le fichier swift, redémarré Xcode et recréé le fichier. Enfin, la classe a été listé et pourrait être utilisé dans Storyboard.

regarder cette réponse , qui ressemble à résoudre le "vrai" problème que j'ai rencontré.

6
répondu bouke 2017-05-23 15:26:32
la source

j'ai résolu ce problème en tapant le nom du Module (malheureusement la liste déroulante affichera rien...) dans la classe Custom de l'inspecteur d'identité pour toutes les vues et le contrôleur de vue.

vous pouvez également indiquer le fournisseur cible. Pour atteindre cet objectif, vous pouvez ouvrir le storyboard en mode sourcecode et ajouter l'attribut "customModuleProvider" dans les crochets ViewController et View angle.

6
répondu Teng Long 2015-06-04 15:38:48
la source

ma solution (Xcode 8.1 Swift 3.0):

Inconnus " de la classe xxx dans l'Interface du Générateur de fichier.

Ouvrir StoryBoard sous forme de Code Source et de la recherche pour xxx . Supprimer l'attribut qui contient la valeur xxx . Construire et courir.

6
répondu ibrahimyilmaz 2016-11-21 15:01:47
la source

dans mon cas, j'ai ajouté un drapeau -ObjC à Other Linker Flags dans les paramètres du projet pour le faire fonctionner. Aussi j'ai essayé avec -all_load drapeau et il a bien fonctionné aussi.

enter image description here

4
répondu Rostyslav Druzhchenko 2017-06-06 15:43:16
la source

dans mon cas, la classe référencée dans le Storyboard / xib n'avait pas Target Membership ensemble.

pour corriger, donnez à cette classe .h et .m les mêmes fichiers de membres cibles que vos autres classes.

No target membership set.

3
répondu pkamb 2015-05-22 03:57:58
la source

j'ai fait face au problème en transférant le storyboard du projet Swift au projet Objective-c, en remarquant la réponse de vvkuznetsov , il s'est avéré que les deux projets utilisent le même identifiant. I "produit - > nettoyer" et appuyer sur la touche "Entrer" dans le champ de texte du Module et de la classe. le problème a disparu.

2
répondu xhg 2017-05-23 15:10:44
la source

ma solution a été de supprimer @objc de la définition de classe personnalisée.

2
répondu danidarko 2015-07-15 13:50:30
la source

j'ai corrigé cela dans le sens de ce que Laura avait suggéré mais je n'avais pas besoin de recréer les fichiers.

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

aller à la vue - > Utilities->Show File Inspector (ceci montrera L'inspecteur de dossier à droite, avec cela .m-fichier info)

ouvrez la section Target Membership et assurez-vous que votre cible est sélectionnée pour cela .m-file

quand j'ai ajouté mon .m fichier de mon projet, il n'a pas l'ajouter à ma cible par défaut pour une raison quelconque, et qui m'a fait l'erreur que vous avez mentionné.

2
répondu Jignesh Kalantri 2015-10-03 08:10:05
la source

ce qui a fonctionné pour moi, c'est d'ajouter 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 prétendument comme ça Qu'Apple veut que nous le fassions maintenant.

cette question montre 3 solutions de rechange possibles en beta 4 ... apparemment, Apple n'a pas été très utile dans cette situation, selon certains, parce qu'ils appeler cela "fonctionne comme prévu."

1
répondu Steven Hernandez 2017-05-23 15:18:24
la source

j'ai eu le même problème avec Xcode version 6.1 (6A1052d). Je pense que le problème apparaît si vous renommez votre projet App / Xcode.

ma solution était d'ajouter le nom du module dans le constructeur de l'interface manuellement.

1
répondu patrickS 2014-11-06 18:07:04
la source

j'ai eu ce problème après avoir ajouté une nouvelle cible, puis créé une nouvelle classe en utilisant la boîte de dialogue 'Nouveau fichier' mais j'ai accidentellement échoué à vérifier la nouvelle cible ainsi que la cible originale dans la boîte de dialogue Création, donc l'objet n'a été ajouté qu'à ma cible originale. La solution était de supprimer les fichiers source (supprimer la référence seulement) puis de les ajouter en utilisant "ajouter des fichiers", vérifiant cette fois les deux cibles.

1
répondu JulianSymes 2014-11-12 22:13:46
la source

la solution était différente pour moi. Vous devez ajouter les .m de la classe à la phase de construction compilé les sources de la cible.

Espérons que cette aide!

1
répondu Ruud Visser 2015-03-24 00:08:22
la source

Sélectionnez votre fichier de classe inconnu, ouvrez l'onglet inspecteur de fichiers, Vérifiez votre nom cible dans Target Membership . Là vous allez.

1
répondu Nix Wang 2015-09-23 13:00:19
la source