web-dev-qa-db-fra.com

"Aucune information trouvée pour la classe nommée ViewController"

Ce bogue me rend fou depuis que j'ai commencé à utiliser Xcode (4.6.3). Chaque fois que j'essaie de lier un élément de Storyboard à mon code, j'obtiens le message d'erreur suivant:

Impossible de trouver des informations pour la classe nommée ViewController. 

Cela se produit également avec les classes personnalisées. J'ai essayé des méthodes telles que:

  • Suppression des données du délégué. 
  • Supprimer et rajouter les classes. 
  • Redémarrage de Xcode.
  • Réinstallation de Xcode. 

Je ne peux pas ctrl-glisser pour créer des connexions dans aucun de mes projets, quelle que soit la classe. Le même problème se produit avec une toute nouvelle application de modèle. Si je tape le code manuellement, puis ctrl-glisser, je peux établir une connexion, mais je ne peux pas l'ajouter automatiquement. Rien de ce que j'ai pu trouver jusqu'ici sur Internet n'a aidé. Des pointeurs?

133
user2597451

Ce qui a résolu le problème pour moi, c’est la suppression de la classe du projet.

Pas:

  1. Dans l'explorateur de fichier de projet (panneau de gauche), recherchez la classe et cliquez avec le bouton droit de la souris -> Supprimer.
  2. Supprimer la référence (ne pas déplacer à la corbeille car vous allez perdre la classe pour de bon)
  3. Faites un clic droit sur le dossier contenant la classe -> Ajouter des fichiers à ...
  4. Trouvez la classe que vous venez de supprimer dans le système de fichiers

Cela semble forcer Xcode à relier la classe au storyboard.

Note: pour moi ce qui suit n'a pas pas travail:

  • Fermer Xcode
  • Nettoyage du projet
  • Supprimer le nom de la classe du storyboard et y entrer à nouveau

Je pense que c'est un bug de la part d'Apple

259
Chris Harrison

Si quelqu'un est toujours frustré par cette situation, il existe un truc pour que les choses fonctionnent.

Ce que je fais est d’entrer manuellement un point de vente dans ma classe, par exemple: @IBOutlet weak var someView: UIView! et de faire glisser du code vers la vue dans IB ou dans le storyboard. Après cela, je suis capable de faire glisser de IB/Storyboard vers ma classe pour établir des connexions, les éditeurs adjoints reconnaissent la classe dans "Automatique", etc.

Fonctionne à chaque fois.

118
Andrew Robinson

Parfois, Xcode, en raison de VC, ne fait pas référence au fichier de classe. La solution simple pour cela est: 

écrire la propriété manuellement comme donné. 

class YourClassName{

     @IBOutlet weak var YourTableName: UITableView!

}

Cela fera un signe de lien vide avant @IBOutlet, ouvrez votre projet dans l’éditeur d’assistant puis cliquez sur le signe de lien enter image description here et faites glisser dans la vue à laquelle vous souhaitez vous connecter (je me suis connecté avec TableView). et c'est tout. Profitez de codage heureux !!!

9
MRizwan33

les étapes suivantes fonctionnent pour moi j'espère que cela fonctionne pour vous aussi 

1- Vous devez rouvrir votre projet après la fermeture de Xcode.

2- Attendre l'indexation des fichiers du projet

3- Vérifiez si cela fonctionne ou pas

4- Si cela ne fonctionne toujours pas, suivez l’étape 5, sinon content pour vous :)

5- Nettoyer et construire votre cible de projet 

 enter image description here

6
Amr Angry

Je viens d'avoir ce problème en avril 2017 avec Xcode 8

Il suffit de créer un point de vente via le code et de le compiler pour le corriger. par exemple:

@IBOutlet weak var containerViewHeight: NSLayoutConstraint!

Tu dois aimer Xcode…

Edit: toujours en cours sur Xcode 9

6

J'ai tout essayé et cela n'a pas fonctionné. Ce qui a fonctionné pour moi, c'est:

  • Nettoyer le dossier et le projet de construction.
  • Projets ouverts (Fenêtre -> Projets)
  • Recherchez votre projet dans la liste et supprimez les données dérivées.
  • Fermer Xcode
  • Redémarrez l'ordinateur (sans choisir de rouvrir les fenêtres ouvertes)
  • lancer Xcode
  • Travail!

Tous mes contrôleurs de vue n'étant pas reconnus, la suppression de tous les fichiers et leur ré-ajout n'étaient pas une option, car il s'agissait d'un grand projet.

5
gmogames

Pour moi, ce qui suit a fonctionné:

  1. Effectuez un nettoyage et un dossier de construction propre (appuyez sur l'option dans le menu Produit pour obtenir la commande du dossier de construction

  2. Arrêtez Xcode

  3. Dans terminal, accédez au dossier de données dérivé:

    (/ Users // Library/Developer/Xcode/DerivedData)

Supprimez le répertoire de données dérivé de votre projet.

  1. Agiter poulet mort dans l'air

  2. Démarrer Xcode

4
Joe149

Au lieu de faire glisser la connexion du bouton au code, ce qui a fonctionné pour moi a été:

  1. En cliquant sur l’élément de storyboard souhaité.
  2. Ouverture de l'inspecteur de connexion (panneau de droite)
  3. Déplacement du cercle + vers la zone de code .

après avoir lié mon code de cette manière, il a normalement fonctionné par la suite.

3
Hayden Crabb

Jusqu'à présent, je devais combiner quelques réponses:

  1. Supprimez le nom de classe personnalisé du storyboard. 

(Cliquez sur le bouton jaune en haut à gauche du contrôleur de vue dans le storyboard -> accédez à l'inspecteur d'identité (option + commande + 3) -> supprimez le nom de la classe personnalisée en haut.

  1. Supprimez la référence au fichier du contrôleur de vue.

(Cliquez avec le bouton droit sur le fichier -> supprimer -> supprimer la référence)

  1. Ajoutez le fichier de contrôleur de vue au projet.

(Cliquez avec le bouton droit sur le dossier dans lequel se trouvait le fichier -> "Ajouter un fichier à [projet]")

  1. Ajoutez le nom de la classe personnalisée au storyboard.
3
yndolok

Si les gens essayent ce qui précède et que les choses ne fonctionnent toujours pas, le truc étrange qui a fonctionné pour moi a été d’ajouter le point de vente dans un espace vide. Cela fonctionne s'il n'y a pas d'autres lignes directement au-dessus ou au-dessous de la ligne que vous ajoutez. Etrange, mais ça a marché!

3
Elliot Goldman

Produit> Clean (Command - Shift - K) corrigé pour moi! 

2
Jangles

Cela a fonctionné pour moi:

  1. Effectuer ' Nettoyer le dossier de construction '
    (maintenez la touche 'option' enfoncée et accédez au menu " Produit " pour y accéder.
  2. Effectuez un simple "nettoyage" (CMD-SHIFT-K) à partir du menu " Produit ". 
  3. Build le projet permettant à Xcode de compiler les fichiers. Aussi, laissez-le indexer les fichiers si nécessaire.

En passant, je ne sais pas si cela a aidé, mais j'ai également supprimé les Données dérivées avant de suivre les étapes ci-dessus (Préférences Xcode> Emplacements).

2
programmer

C'est l'étape la plus facile que j'ai faite pour résoudre ce problème.

  1. Je nettoie le projet
  2. Faites glisser un nouveau bouton dans le contrôleur de vue.
  3. Construisez le projet.
  4. Connectez le bouton nouvellement déplacé à la classe (prise ou action).
  5. Alors voila !!! D'autres points de vente peuvent maintenant être connectés à la classe!
2
user2480567

Reste sur la cible!

J'ajoutais une nouvelle classe avec un Xib et j'ai commencé à voir ce problème et j'ai passé un bon moment à regarder les réponses et à voir si l'une de ces choses avait changé.

En l'occurrence, j'ai plusieurs cibles dans mon espace de travail et je dois souvent basculer entre elles.

Il s'avère que l'ajout de nouveaux fichiers déclenche un réindexation dans Xcode. Mais si vous vous dirigez vers la mauvaise cible, l'indexation n'aura probablement aucun sens et lors du glissement de connexion, Xcode ne pourra pas trouver votre classe.

En bref

Étape 1.

 Target Seledction

Assurez-vous que le jeu de cibles correct est défini afin que l'indexation ait un sens.

2
Damo

J'ai essayé toutes ces réponses, le problème pour moi était lié au fait que Xcode ne pouvait pas indexer les fichiers. J'ai résolu ce problème en quittant simplement Xcode et en rouvrant le projet. Bien sûr, je l’ai fait après avoir essayé toutes les solutions ci-dessus: p

2
JohnVanDijk

Juste besoin de nettoyer et de reconstruire le projet.

1
Carolina Aguilar

Selon mon expérience de test, si vous supprimez une classe associée au Xcode et que vous rajoutez un fichier, ce problème se produira.

1
inix

Habituellement, lorsque cela m'arrive, je n'ai tout simplement pas encore enregistré le code pour la classe. Il suffit de sauter dans le code et d'appuyer sur cmd + s, ce qui corrige souvent le problème.

1
Delimiter

Aucune des étapes ci-dessus n'a fonctionné pour moi, mais je pense avoir découvert le problème. Au moins c'est ce qui a fonctionné pour moi, et ce n'est pas un bug dans Xcode.

Dans l’éditeur d’assistant, regardez en haut de la fenêtre le code de votre viewController. La troisième option à partir de la droite dit probablement "Manuel", mais elle devrait dire "Automatique". Une fois que j'ai changé cela, le problème a été résolu!

1
John Nolan

J'avais un problème similaire: "Impossible de trouver une classe nommée ..." et la cause était stupide de ma part une fois que je l'ai compris. Assurez-vous de ne pas faire glisser l'élément depuis l'interface vers interface -, assurez-vous qu'il est également déplacé vers la classe elle-même.

1
Will Buffington

Sélectionnez ViewController dans storyBoard, supprimez la valeur actuelle dans Panneau de droite / "Classe client"/"classe" puis rajoutez la classe de contrôle (type: "SampleViewController" ...), entrez .-- > Ça marche pour moi

1
tungnv

Pour moi, la vue pour laquelle j'avais spécifié une classe personnalisée échouait à être compilée par le constructeur d'interface. Il était marqué @IBDesignable

Supprimer @IBDesignable, puis ajouter mes points de vente, puis le marquer comme @IBDesignable a résolu le problème dans mon cas.

0
Nick DiZazzo

Dans mon cas, c'était parce que le processus d'indexation Xcode s'était arrêté. Le redémarrage de mon Mac a corrigé le problème.

0
David Wood

J'ai tout essayé!

Assurez-vous que le nom de classe de votre UIViewController ne contient pas le mot "Test"

Rapport de bogue soumis.

0
Aaron Kreipe

Je voudrais essayer de refaire les fichiers .m et .h en question et leur donner un nom original, pas générique comme "ViewController". Essayez quelque chose de plus similaire à ce que vous voulez que ce fichier fasse, et se terminant dans View Controller (c'est-à-dire "PizzaDecoraterViewController")

Sélectionnez ensuite le ViewController que vous souhaitez connecter à ces fichiers. Assurez-vous de sélectionner le ViewController et pas seulement un objet à l'intérieur. Cliquez sur la barre noire en bas (celle qui comporte les icônes "Premier répondant" et "Quitter"). Le ViewController entier doit décrire le bleu. Ensuite, allez à la section Classe personnalisée de l'inspecteur d'identité et vous devriez voir un "UIViewController" grisé dans le premier champ. Dans ce champ, tapez le nom du fichier .h ou .m auquel vous voulez vous connecter (commencez à taper PizzaDecorator ... et il devrait faire un peu de travail auto-complet). Puis appuyez sur ENTER.

Lorsque vous ouvrez l'Assistant éditeur, assurez-vous que le fichier que vous essayez de glisser-déposer est bien le bon fichier.

Si vous avez tout fait comme indiqué ci-dessus, alors cela devrait fonctionner.

0
CaptJak

Eh bien dans mon cas, la chose qui a fonctionné (c'est un peu bizarre, mais a fonctionné) est la suivante: 

Essayez d’ajouter une source de données (par exemple, une extension au ViewController comme un UITableViewDataSource). Xcode essaiera de recharger le ViewController. Ensuite, j'ai écrit une méthode du protocole (au début, Xcode n'a pas complété automatiquement les méthodes, mais je l'ai écrit manuellement), puis j'ai ajouté les IBOutlets, puis j'ai finalement supprimé la source de données.

Exemple:

class TestViewController:UIViewController{
    // This viewController presents “Could not find any information for  class named ViewController”
}

extension TestViewController:UITableViewDataSource{
    //Add Some methods of the protocol, Xcode will try to autocomplete and then it's going to reload the class, from then you can add your IBOulets / Actions .. And remove this extension if you don't need it otherwise.
}
0

Ok les gars ont vu presque toutes les réponses et aucune n'a fonctionné pour moi.

Donc, ce qui a fonctionné pour moi est le suivant: 

  1. Copiez l'adresse Derived Data à partir de votre projet Xcode . Pour cela, procédez comme suit: 

Xcode -> Preferences -> Location Tab -> Derived Data

  1. Close Xcode

  2. Maintenant, allez à l’emplacement des données dérivées et supprimez le dossier de votre projet.

Maintenant, ouvrez Xcode et le tour est joué!

0
arqam

Essayez simplement de supprimer les données dérivées pour le projet

0
david.gol

Accédez au dossier du projet et supprimez le dossier de données dérivées.

si vous ne pouvez pas trouver les données dérivées, allez au Finder et allez à

 ~/Library/Developer/XCode/DerivedData/"project"

(remplacez le nom "projet" par le nom du projet)

0
Sandu

Comme je l'ai commenté sur la réponse de @ ChrisHarrison, cela n'a pas fonctionné pour moi, mais la suppression des données dérivées comme précédemment l'a été en supprimant les données dérivées comme suit https://stackoverflow.com/a/16182672/1449799

0
Michael

Dans mon cas, j'avais le même nom de classe et xcode ne pouvait pas reconnaître celui que je ciblais, alors soyez prudent dans la sélection du nom de vos classes.

0
andesta.erfan

Vérifiez à partir du Finder Xcode s'il est fermé ou non. 

Forcer quitter Xcode et redémarrer.

Produit> Clean

0
erdikanik

Supprimez les fichiers (uniquement les références) et ajoutez-les à nouveau.

0
jomafer

Je sais que, dans la plupart des cas, il ne s'agit que d'actionner Xcode, mais dans mon cas, aucune des actions suggérées n'a réussi à résoudre le problème et je pense que c'est une erreur que j'ai commise lorsque j'ai tenté de renommer mon projet. J'ai donc créé un nouveau projet. et tout importer.

Cela a finalement résolu le problème.

0
CristianMoisei

Je viens de redémarrer Xcode et ensuite cela fonctionne.

juste essayer ceci

rm -rf ~/Library/Caches/com.Apple.dt.Xcode
defaults delete com.Apple.dt.Xcode IDEIndexDisable
defaults write com.Apple.dt.Xcode IDEIndexEnable 1 
0
yousuke