web-dev-qa-db-fra.com

Xcode 4: Créer une xib UIView sans se connecter correctement

J'essaie de créer une nib contenant une vue qui sera incorporée dans un TableViewCell. J'ai créé les fichiers d'interface et d'implémentation, ResultCell.h et ResultCell.m. Ils sont stock, out-of-the-box, aucun changement de code.

Je crée ensuite un fichier XIB vide et y glisse un UIView. Ensuite, je clique sur Propriétaire du fichier et configure le type sur ResultCell. Je clique sur la vue et configure sa classe sur ResultCell.

Voici les problèmes que j'ai:

  1. Lors de l'utilisation de la vue Assistant d'édition (dans laquelle j'habite), le fichier ResultCell.h n'apparaît pas lorsque je consulte le fichier ResultCell.xib. Je dois le forcer à charger en cliquant sur Automatique et en sélectionnant le fichier.
  2. Lorsque je dépose une étiquette dans la vue, puis que Ctrl + Clic et faites glisser le .h pour créer une prise, le message d'erreur suivant s'affiche: " Impossible d'insérer une nouvelle connexion de prise: Impossible de trouver des informations sur la classe nommée ResultCell. "

J'ai essayé de créer et de recréer la vue, mais cela ne fonctionne tout simplement pas et j'ai commencé à perdre patience. Toute aide serait très, très appréciée!

83
Tim Sullivan

Cela pourrait ne pas fonctionner pour votre problème spécifique, mais parfois, je reçois cette erreur lorsque je travaille avec des nibs récemment créées. La suppression et la recréation des nibs et des contrôleurs de vue avec les mêmes noms qu'auparavant n'ont pas résolu le problème, mais ont relancé Xcode.

80
Defragged

Je suis entré dans un état similaire aujourd'hui. C'était très étrange: je pouvais attacher n'importe quel XIB (nouveau ou existant) à une classe ViewController déjà existante dans le projet, mais je ne pouvais pas créer un nouveau ViewController et le joindre correctement à un XIB. La fonctionnalité "assistant" ne fonctionnait pas, pas plus que la fonctionnalité de connexion d'IB à en-tête de fichier.

La fermeture et la réouverture du projet ne l'ont pas corrigé.
Quitter XCode et redémarrer ne l’a pas corrigé.
Créer un nouveau projet et tester les fonctionnalités ont bien fonctionné, ce qui m'a amené à penser qu'il y avait quelque chose de corrompu dans une mémoire cache quelque part.

Ma solution

  • Fermez votre projet.
  • Allez dans le dossier ~/Bibliothèque/Developer/XCode/DerivedData et SUPPRIMEZ tous les sous-dossiers qui référencent le projet sur lequel vous travaillez.
  • Ouvrez votre projet en XCode. Le problème devrait être résolu maintenant.

Incidemment, le simple fait de procéder à un nettoyage complet ne semble pas éclaircir les choses. J'ai dû détruire les données dérivées. Je suis certain d'avoir pris cette position à cause des jeux de git que je jouais, mais je ne savais pas comment sortir, car même revenir aux versions précédentes de git n'a pas aidé. (C'était un indice important aussi que c'était quelque chose qui n'avait pas été suivi par le projet lui-même.)

112
David Pisoni

J'ai eu le même problème. Et j'ai essayé:

  • Redémarrage de Xcode
  • Suppression des données dérivées
  • Et beaucoup plus

Rien de tout cela n'a fonctionné. Ce qui a fonctionné pour moi était simplement de:

  • Supprimez les fichiers de classe 'suspects' du projet (il suffit de supprimer les références, hein?)
  • Re-les ajouter au projet

Et fait! 

13
Dr.Kameleon

Je viens d'avoir ce problème et le redémarrage de Xcode ne le résout pas. J'ai supprimé les fichiers de classe du projet, puis je les ai rajoutés et cela a commencé à fonctionner.

13
jasongregori

Si le redémarrage de Xcode ne fonctionne pas chez vous, j’ai constaté que le fait de basculer le nouveau fichier .m vers l’appartenance cible fonctionnait.

9
Duane Fields

Cela m'a aidé:

  1. dans le panneau de fichier de projet (côté gauche), sélectionnez le fichier xib cassé.
  2. Cliquez sur l'icône du propriétaire de fichiers dans la vue de l'éditeur.
  3. dans le panneau des propriétés (à droite), sélectionnez le troisième onglet (en haut)
  4. spécifier la "classe personnalisée"

Si vous ne voyez pas de "panneau", jetez un coup d'œil au coin supérieur droit de la fenêtre et activez les boutons "Voir" appropriés. Si vous ne voyez pas les boutons "Voir", cliquez sur le bouton en haut à droite de la capsule.

3
Ivan Dossev

dans XCode, accédez à l'organiseur, cliquez sur projet, cliquez sur supprimer les données dérivées ... puis nettoyez le projet

2
Peter Lapisu

J'ai remarqué que le fichier .m avait été déplacé dans le dossier en.lproj.

Il suffit de supprimer (référence uniquement) le fichier .m du Xcode et de déplacer le .m du en.lproj. Ajoutez-le à nouveau.Il va résoudre le problème.

Ne vous inquiétez pas, vous retrouverez toutes vos relations.

2
A.S.

Dans mon cas, cela a contribué à créer un "faux changement" (juste un espace) dans le fichier d'en-tête correspondant.

2
jakob.j

J'ai rencontré le même problème aujourd'hui. Le redémarrage de XCode n'a pas résolu le problème pour moi. Je suis parvenu à remettre les choses à la normale en utilisant "Supprimer" option de "Données dérivées" du projet qui se trouve sous Organiseur . Selon l'organisateur, "les données dérivées incluent l'index, la sortie de génération et les journaux". Je suppose que soit index ou build output était la cause de ce problème.

2
Praveen Kumar

C’est peut-être ce qui a fonctionné pour moi. (Xcode v4.5)

Cela n'a pas fonctionné

J'essayais de contrôler la traînée dans la définition d'interface de mon .h

@interface SearchViewController : UIViewController

@end

Cela a fonctionné (peut-être est-ce ainsi que cela était supposé fonctionner, je ne le savais pas auparavant). Contrôle glisser et déposer après le support fermé.

@interface SearchViewController : UIViewController
{
}

@end
1
Mouli

J'ai eu un problème similaire avec un projet écrit en Swift.

Ce qui a fonctionné pour moi a été de configurer IBOutlet avec un code comme celui-ci.

@IBOutlet var foo: UIView?

et ensuite connectez-le à Interface Builder en le faisant glisser vers le petit cercle qui apparaît juste à côté de la ligne de code.

1
Patrick

Ce problème semble être un bogue Xcode qui survient surtout lorsque vous remplacez un fichier par un nouveau fichier du même nom. Xcode semble conserver une référence de l'ancien fichier du même nom.

Quoi qu'il en soit, la solution à ce problème semble être la suivante:

  1. Nettoyer le projet
  2. Cliquez sur (Votre projet) dans la vue Navigateur de projet. Accédez à Compiler les sources sous phases de construction de la cible pour laquelle vous construisez. Supprimez et rajoutez le fichier .m qui vous pose problème.
  3. Sinon, dans l'inspecteur de fichier (vue Utilitaires) du fichier NIB, sous Appartenance à la cible, décochez et relisez le nom de la cible.
  4. Redémarrez Xcode pour faire bonne mesure.
  5. Bien sûr, supprimer et rajouter le fichier .m seul devrait également résoudre le problème.

(Seules les étapes 1 et 2 ont résolu le problème pour moi.)

1
codeburn
  1. ResultCell doit être une sous-classe de UITableViewCell
  2. Vous ne devez pas faire glisser une UIView sur le canevas vide, vous devez faire glisser une UITableViewCell
  3. Vous devez sélectionner la cellule et changer it pour être votre sous-classe
  4. Le propriétaire est le plus souvent un contrôleur avec une sortie vers la cellule

Chaque fois que vous souhaitez charger une nouvelle cellule, appelez:

 [[NSBundle mainBundle] loadNibNamed:nibName 
                               owner:controllerWithOutletToCell 
                             options:nil]

après le chargement, utilisez la cellule et réglez ivar/outlet sur nil, prêt pour le prochain chargement

il y a d'autres moyens, mais c'est courant

1
bshirley

Aucune des solutions de contournement ci-dessus n'a résolu le problème de connecteur pour moi. J'ai donc mis mon projet animalier en veilleuse jusqu'à ce que je tombe sur le thread de stackoverflow suivant:

https://stackoverflow.com/a/15873770/2846800

Je travaillais sur un projet volumineux dans une version précédente de XCode et j'avais désactivé l'indexation. En réactivant l'indexation, mon problème est maintenant corrigé:

defaults delete com.Apple.dt.XCode IDEIndexDisable

Je peux maintenant utiliser les fonctionnalités D & D d'Interface Builder. J'espère que cela peut aider les autres ...

1
user2846800

Pour moi, le nettoyage ou la suppression de DerivedData a résolu le problème.

J'ai essayé de supprimer et de recréer ma classe UIViewController plusieurs fois et j'ai eu le problème encore et encore.

Ensuite, j'ai recréé la classe UIViewController et lui ai donné un nom différent. Cela a résolu le problème pour moi.

0
Fabian Stark

J'ai le même problème. Le projet de reconstruction m'aide à Command+B.

0
Eugene Mekhedov

Il suffit de mettre une ligne entre @implementation et @synthesize. La plupart des réponses ici ont cela en commun. Ça a fonctionné pour moi

@implementation 

@synthesize
0
user2371963

Il s’agit peut-être d’un sujet ancien, mais au cas où vous auriez le même problème à l’avenir, essayez de supprimer les fichiers .xib, .h et .m associés et créez-en de nouveaux. Pour moi, le UIViewController dans mon fichier .h n'était pas violet et même le backspacing et sa frappe ne servaient à rien.

0
S.G.

Renommer les fichiers de classe peut les dissocier de XIB. Cette réponse m'a aidé à découvrir ceci:

Ctrl-glisser du bouton à la méthode ne fonctionne pas. Xcode/Interface Builder

Vérifiez que votre classe personnalisée est définie correctement dans l'inspecteur d'identité.

0
Alexander Liberson

Symptôme similaire, mais cause différente. 

Apparemment, j'ai appuyé sur la touche Retour arrière lorsque le focus était sur la vue Assistant, car l'une des lignes de commentaire du modèle de fichier standard allait de // à /, ce qui entraîne la non compilation du fichier. 

La correction du commentaire a permis au SDK d'analyser le fichier, de le reconnaître en tant que UIViewController et de l'ajouter à la sortie.

SO - Si vous rencontrez ce problème, effectuez une compilation ou une analyse pour déterminer si des erreurs doivent être corrigées dans votre fichier .h de contrôleur de vue. ALORS essayer les autres solutions.

0
software evolved

J'espère que cela aide quelqu'un là-bas.

Je viens juste de supprimer le dossier de données dérivé. Vous devez cliquer sur Fenêtre -> Organiseur -> Projets -> Supprimer les données dérivées.

ET REDÉMARREZ XCODE.

Vous devriez être bon pour y aller!

0
Ronaldoh1

En utilisant Swift, j'ai eu un problème similaire. J'ai découvert que les commentaires faisaient partie du problème pour moi.

J'ai utilisé le contrôleur de vue par défaut, y ai travaillé, puis créé un deuxième contrôleur de vue en copiant le premier en le ramenant à viewDidLoad () et en renommant TestViewController. Constructions travaillées, code exécuté. Tout était bien.

Quand je suis allé faire glisser un UITextField pour créer un point de vente, il ne m'a pas laissé. J'ai remarqué que mes commentaires disaient toujours "ViewController.Swift", j'ai donc changé le texte du commentaire en "TestViewController.Swift" et l'ai reconstruite. J'ai pu connecter ma prise!

Je me demande si ce qui s’est passé, c’est que l’indexeur lisait les commentaires ainsi que les noms des classes, et qu’il était confus.

0
Antonio Ciolino

Je viens d'essayer tout ici et rien n'a fonctionné (en utilisant un aperçu du développeur pour Xcode 5).

La seule chose qui a fonctionné pour moi a été de mettre cette ligne incomplète dans mon fichier d'interface:

@property (nonatomic, weak)

Pour une raison quelconque, ajouter des prises et des actions par glisser-déposer à partir d'un fichier .xib a bien fonctionné par la suite.

0
djibouti33

Si vous avez copié des fichiers d'un autre projet, assurez-vous de cocher la case "Ajouter aux cibles".

0
John67

Il y a aussi une autre raison au problème ... si vous avez créé un nouveau fichier de classe de cacao avec un modèle autre que iOS ... je peux arriver ...

La solution serait de le supprimer et de le recréer avec le bon modèle  enter image description here

0
mihir mehta

Lorsque j'essaie de générer automatiquement la fonction d'action avec la méthode ci-dessous, j'ai rencontré ce problème.

 enter image description here

Mais je peux le faire avec ci-dessous, écrivez manuellement la fonction action en premier, puis faites glisser sur la région de la fonction @IBAction

0
Kris Roofe

J'ai eu ce problème et trouvé une solution ne figurant pas ci-dessus.

Dans mon cas, je pouvais constater que le fichier .h de la classe avait un problème, car mon contrôleur de vue personnalisé ne reconnaissait pas la classe: UIViewController (en noir et non en violet). Tous les autres contrôleurs de vue personnalisés avaient le: UIViewController en violet.

dans mon cas, et éventuellement le vôtre, j'avais besoin d'ajouter la classe au menu déroulant cibles/phases de construction/compilation des sources. Le fichier .m doit être ajouté. Tous les autres .m étaient là mais pas celui-là.

Une fois que je l'ai ajouté, le: UIViewController est apparu en violet et tout a bien fonctionné.

0
Michendo

Dans XCode 7.1, l'ajout du connecteur à un point différent de mon fichier source a fonctionné. L'erreur m'a renvoyé à l'une de mes variables comme s'il s'agissait d'une classe (cela n'avait aucun sens). L'erreur a cessé lorsque j'ai ajouté le connecteur au-dessous de cette variable au lieu de la voir au-dessus.

0
user2683747

La nouvelle classe ne faisant pas partie de "TARGET" en est probablement la cause fondamentale, comme le mentionnent certaines de ces réponses. 

Lors de la création d'une nouvelle classe de cacao, l'option d'ajouter une nouvelle classe à la cible est cochée par défaut. Si, pour une raison quelconque, l'option n'est pas cochée lorsque vous cliquez sur Enregistrer, vous aurez ce problème. 

New Class Target

Chacune de ces solutions de contournement qui ajoutent la nouvelle classe à la cible des applications travaillera à résoudre le problème. C'est un point commun à toutes ces "corrections".

Je pense que XCode a probablement des bugs qui font qu'un nouveau fichier, par défaut, ne soit PAS ajouté à la cible principale des applications. Le correctif se résume à ajouter votre classe 'cassé' à la cible principale

0
Michael Bopp

Pour mon cas, j'ai plusieurs projets avec d'autres dépendances. J'ai essayé de le résoudre en supprimant les données dérivées ou en redémarrant XCode mais cela ne fonctionnait pas. En fin de compte, j'ai essayé la méthode suivante et cela fonctionne:

Accédez à cible> Construire les architectures cibles uniquement> et définissez Debug et Release sur NO.

Définissez cette option pour tous les projets de l'espace de travail et recompilez-la pour vous assurer qu'il n'y a pas d'autres erreurs. Peut-être que ça n'a pas de sens mais que ça l'a fait. Au cours de ma compilation, j'ai eu d'autres problèmes tels que des erreurs de l'éditeur de liens et des symboles non trouvés.

0
morph85

Pour le fichier * .m de cette vue de classe, ouvrez "Afficher l'inspecteur de fichier" et décochez "Appartenance à la cible" pour ce projet, puis nettoyez (menu Produit-> Nettoyer) et revérifiez "Appartenance à la cible" pour ce projet.

enter image description here

0
Kozlov V