J'ai mis à niveau 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 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 correctement lié. Ma seule autre option peut être de supprimer l'intégralité du fichier de storyboard et de recommencer à zéro car il pourrait être corrompu d'une manière ou d'une autre.
Edit: Je voudrais également ajouter que j'ai essayé de nettoyer, de réinitialiser le simulateur, de jouer avec les phases de construction, etc. Rien de tout cela ne fonctionne.
ios
xcode
xcode6
interface-builder
uistoryboard
Octet épique
la source
la source
Réponses:
J'ai résolu ce problème en tapant la question. J'ai pensé que je répondrais à ma question et la laisser ici pour toute autre personne qui pourrait rencontrer ce problème lors de l'utilisation de 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).
Ensuite, avec ces objets 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 ça! Le module actuel pour tous mes objets personnalisés doit avoir été défini de manière incorrecte en interne dans Xcode 6 beta 4. Mais il n'y avait aucune indication visuelle de cela dans l'inspecteur.
Notez que si appuyer sur Entrée dans la zone de texte Module ne fonctionne pas, essayez de sélectionner la flèche vers la droite et sélectionnez manuellement votre module actuel, puis désactivez 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 pour résoudre un problème différent).
Voici une image pour rendre les choses plus claires:
la source
@objc(...)
à l'une de mes classes Swift.Parfois, Xcode manquait
customModule="AppName" customModuleProvider="target"
Pour le corriger, ouvrez le storyboard en tant que code source et remplacez cette ligne:
pour ça:
la source
customModuleProvider
, puis l'erreur a disparu.customModuleProvider
fait pour moi, merci!J'ai eu ce problème après avoir renommé une classe rapide. Résolu en utilisant la directive @objc:
la source
@objc class X
et changer pour@objc(X) class X
travailler.@objc()
directive ne soit pas nécessaire pour la classe ViewController "originale" ...Projet avec plusieurs cibles
Dans mon cas, je travaille sur Project avec plusieurs cibles et le problème "hériter de la cible" n'a pas été vérifié. La sélection de "hériter de la cible" a résolu mon problème
la source
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é, ce qui m'a donné l'erreur.
la source
Compile Sources
. C'est vraiment la solution correcte (et unique) pour certains.Cela peut se produire dans n'importe quel Xcode supérieur à 6.0. Cela m'est arrivé après avoir renommé certaines classes ViewController dans le projet Swift (mais je suppose que cela se produira également avec Obj-C). Vous n'avez qu'à ouvrir le générateur d'interface, allez à Inspecteur d'identité de ViewController qui a renommé sa classe, sélectionnez la classe et appuyez sur Entrée. Cela va réaffecter la classe renommée à ViewController sélectionné et réinitialiser également la valeur du module qui est perdue après avoir renommé la classe.
Mise à jour pour Xcode 8.1 (probablement aussi 8.0):
Xcode 8.1 plante juste. Simplement et de façon ennuyeuse, cela se bloque et n'imprime rien. Je poursuivais ce crash fantôme pendant une heure juste pour découvrir que c'était exactement la même chose - une classe non affectée dans IB. Si vous obtenez des plantages fantômes, vérifiez d'abord IB pour les classes non attribuées.
la source
Parfois, le contrôleur que vous fournissez perd son appartenance cible à l'application actuelle. Dans ce cas, appuyer sur Entrée dans le champ "Module" ne fera rien. Accédez au contrôleur et assurez-vous que l'appartenance cible est définie sur l'application actuelle.
la source
L'activation a
Inherit Module From Target
pris le module cible correct. Cela a résolu le problème.la source
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
la source
Je l'ai corrigé en faisant exactement le contraire de ce que ChikabuZ a suggéré (merci de l'avoir souligné, cependant). Dans le fichier storyboard, recherchez ceci:
et remplacez-le par ceci:
Je ne peux pas croire combien d'heures je perds pour contourner les bogues dans le compilateur Swift et Xcode 6
la source
Sélection du bon
Module
pour monCustom Class
J'ai résolu ce problème.C'est ici :
la source
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
etcustomModuleProvider
de l'entité de contrôle.A fait un tour pour moi.
la source
J'ai eu le même problème.
Dans mon cas, Xcode n'ajoutait pas ma classe personnalisée à: Target> Build Phase> Compile Sources.
Je vous recommande donc de vérifier si votre CustomClass.m est là.
J'espère que ceci vous aide.
la source
J'ai rencontré ce problème dans Xcode 6.1 lorsque j'ai supprimé
Main.storyboard
leLaunchScreen.xib
fichier et lesViewController
classes par défaut de mon projet.Je l'ai corrigé en supprimant les entrées
Launch Screen File
etMain Interface
deInfo.plist
la source
Vérifiez si votre classe a le droit d' adhésion cible .
la source
J'ai googlé partout pour ça. Aucune des réponses ne fonctionne pour moi jusqu'à ce que je rencontre 1 mec qui m'a demandé de déplacer mon dossier de projet sur le bureau. Cela a juste fonctionné automatiquement. Apparemment, si vous avez votre dossier de projet en profondeur dans de nombreux dossiers, XCODE se casse réellement.
la source
Ces étapes fonctionnent pour moi.
1) Effacer les données dérivées.
2) Supprimer les fichiers .h et .m
3) Créer à nouveau des fichiers .h et .m
la source
J'ai résolu ce problème en ouvrant mon fichier de 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.
la source
Ce que @gfrs a dit est correct, vous devez configurer le module. Cependant, j'ai rencontré une fois un problème selon lequel ma classe n'était pas répertoriée dans la
Class
liste déroulante. Finalement, j'ai supprimé le fichier rapide, redémarré Xcode et recréé le fichier. Enfin, la classe a été répertoriée et pourrait être utilisée dans Storyboard.Jetez également un coup d'œil à cette réponse , qui semble résoudre le «vrai» problème que j'ai rencontré.
la source
J'ai résolu ce problème en tapant le nom du module (malheureusement, la liste déroulante n'affichera 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 objectif, vous pouvez ouvrir le storyboard en mode code source et ajouter l'attribut "customModuleProvider" dans les crochets ViewController et View.
la source
Ma solution (Xcode 8.1 Swift 3.0):
Classe inconnue xxx dans le fichier Interface Builder.
Ouvrez StoryBoard en tant que code source et recherchez xxx . Supprimez l'attribut qui contient la valeur xxx . Construisez et exécutez.
la source
customModule="" customModuleProvider=""
Dans mon cas, j'ai ajouté un drapeau
-ObjC
àOther Linker Flags
dans les paramètres du projet pour le faire fonctionner. J'ai aussi essayé avec le-all_load
drapeau et cela a bien fonctionné aussi.la source
Dans mon cas, la classe référencée dans le Storyboard / xib n'avait pas d' adhésion cible définie.
Pour résoudre ce problème, donnez à cette classe
.h
et à ces.m
fichiers le même abonnement cible que vos autres classes.la source
Ma solution était de supprimer @objc de la définition de classe personnalisée.
la source
J'ai rencontré le problème lorsque j'ai porté le storyboard du projet Swift vers le projet Objective-c, en remarquant la réponse de vvkuznetsov , il s'est avéré que les deux projets utilisant 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.
la source
J'ai corrigé cela dans le sens de ce que Laura a suggéré, mais je n'avais pas besoin de recréer les fichiers.
À l'aide de XCode 4, dans le Navigateur du projet, sélectionnez le fichier .m qui contient la classe dont il se plaint
Allez dans Affichage-> Utilitaires-> Afficher l'inspecteur de fichiers (cela montrera l'inspecteur de fichiers à droite, avec ces informations de 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 fait obtenir l'erreur que vous avez mentionnée.
la source
Mon problème était une erreur utilisateur. J'avais un UIView générique dans mon storyboard et dans la section Custom Class de l'inspecteur d'identité, j'avais accidentellement changé le nom d'UIView en charabia.
Tout ce qu'il a fallu pour réparer était de le changer de nouveau en UIView.
la source
Ce qui n'a fonctionné que pour moi, c'est d'ajouter le nom du module au fichier xib ...
Sooo, les fichiers xib ressemblent à ceci:
HORRIBLE solution à mon avis, mais c'est censé être la façon dont Apple veut que nous le fassions maintenant.
Cette question montre 3 contournements possibles en 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".
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 avez renommé votre projet App / Xcode.
Ma solution a été d'ajouter manuellement le nom du module dans le générateur d'interface.
la source
J'ai eu ce problème après avoir ajouté une nouvelle cible, puis créé une nouvelle classe à l'aide de la boîte de dialogue 'Nouveau fichier', mais j'ai échoué par erreur à vérifier la nouvelle cible ainsi que la cible d'origine dans la boîte de dialogue de création, donc l'objet n'a été ajouté qu'à mon cible d'origine. La solution consistait à supprimer les fichiers source (supprimer la référence uniquement) puis à les rajouter à l'aide de "Ajouter des fichiers", cette fois en vérifiant les deux cibles.
la source