web-dev-qa-db-fra.com

Xcode 6: impossible de connecter un IBOutlet à ViewController

Après la mise à niveau vers Xcode 6, j’ai ouvert un ancien projet (qui contient un sous-projet et donc de nombreuses cibles) Et j’ai remarqué qu’aucun lien de mon Storyboard ViewContoller aux travaux relatifs Objets.

Par exemple, j'ai un ViewController avec une TableView à l'intérieur et maintenant je ne peux plus rien y faire car la connexion est manquante. Je ne peux même pas redéfinir un nouvel IBOutlet dans le VC car la flèche du storyboard du VC ne se connecte à rien.

Pour être plus clair: 

screenshot

La classe est définie dans la section Classe personnalisée, donc je ne trouve pas le problème

screenshot

Que dois-je faire? J'utilise obj-c pas Swift, j'ai trouvé une réponse connexe, mais tout à propos de Swift.

19
lorenzop

Vous pouvez également voir que le lien entre la vue parent et la classe personnalisée est rompu (n'est plus visible), ce qui pose un énorme problème.

J'ai eu exactement le même problème avec l'application sur laquelle je travaille actuellement, mettre à jour XCode de 5.xxx à 6.1. La solution qui fonctionnait pour moi était de supprimer la référence de chaque contrôleur de vue et de les rajouter au projet ...

Pour toutes les personnes confrontées à ce problème, voici le truc (ennuyeux):

  • Étape 1 : sélectionnez les fichiers de contrôleur de vue .h et .m
  • Étape 2 : supprimer la référence de ces fichiers
  • Étape 3 : rajoutez les fichiers à votre arborescence de projet
  • Étape 4 : ouvrez le storyboard, reconstruisez éventuellement le projet et souriez

Je peux comprendre que ces choses puissent être vraiment ennuyantes, mais cela a fonctionné pour moi ... J'espère que cela aidera quelqu'un d'autre!

50
JJBoursier

Dans votre hiérarchie de storyboard, sélectionnez le contrôleur de vue,

enter image description here

Dans le volet de droite de la section Classe personnalisée Class, sélectionnez le menu déroulant et le contrôleur de vue souhaité.

enter image description here

22
Tom Howard

J'ai eu un comportement similaire dans Xcode 6.1.1 lorsque j'essayais d'ajouter le premier point de vente à une nouvelle vue.

J'ai essayé de supprimer les références et d'ajouter les fichiers comme suggéré ci-dessus, sans succès.

Ce que j’ai trouvé fonctionnait, c’était d’écrire à la main la première propriété de la nouvelle vue. Je viens de sauter dans:

@property NSString *temp;

Je pourrais alors attacher mes prises de la manière habituelle. Supprimez simplement la propriété temporaire une fois que vous avez ajouté votre premier point de vente.

J'espère que cela t'aides.

5
Adam Nierzad

Il semble taper la sortie en premier (Swift):

@IBOutlet weak var someViewOutlet: UIView!

puis en faisant glisser de IB la sortie vers l'extrême droite, tapez dans le code ci-dessus.

Le redémarrage de Xcode résout le problème (parfois). Utiliser Xcode 6.1

4
hugey

Peut-être que je pourrais vous aider. Dans mon cas, le problème était que le fichier viewController.Swift n'était pas connecté au StoryBoard. La solution consiste à cliquer sur la bordure supérieure de la vue dans le storyboard, à côté des 3 icônes (Contrôleur de vue, Premier répondant et Quitter). contrôleur de vue personnalisé.

J'espère que cela t'aides. Xcode est difficile !!

4
user462990

Voici la solution appropriée, je crois.

Si vous avez renommé le contrôleur en code, vous devez mettre à jour le fichier .xib.

Je ne pouvais pas trouver un moyen de le faire dans le constructeur d'interface, alors faites ceci:

  1. Ouvrez le fichier .xib avec un éditeur de texte: faites un clic droit sur le fichier> ouvrir en tant que> code source 

  2. Dans le noeud <objects>, recherchez le noeud <placeholder> avec la propriété placeholderIdentifier="IBFilesOwner" et remplacez la valeur dans customClass="MyOldControllerName" par votre nouveau nom de contrôleur: customClass="MyNewControllerName"

Et tous vos IBOutlets fonctionneront à nouveau normalement.

2
Daniel Moreira

Merci à tous ceux qui ont commenté.

C'est un bug de Xcode 6/6.0.1. Téléchargé et installé la version 6.1 et le problème a disparu.

1
lorenzop

Dans Xcode 6.3, je devais fermer Xcode et redémarrer le Mac. Le redémarrage de Xcode seul ne l’a pas fait pour moi.

J'ai eu 6.3 depuis longtemps et mon problème était avec les nouveaux projets que je créais pour tester certaines choses. Ce n'est certainement pas un problème de mise à niveau cette fois-ci.

0
Dan Loughney

aucune solution n'a résolu mon même problème ... Mais j'ai résolu par:

  • fermer xcode
  • renommer le dossier du projet
  • ouvrir xcode

et puis les points de vente seront de retour

J'espère que cette solution est la bonne pour les personnes qui ont le même problème

0
Kazzar

D'accord, vérifions si c'est l'absence d'un nom de module.

  1. Dans votre scénario ViewController, tapez le nom du module. (le nom du projet)

2.Cliquez à l'extérieur dans un autre champ. Lorsque vous revenez au champ de module, il peut indiquer non, mais il y aura maintenant une entrée du menu déroulant pour le nom de votre projet.

  1. Sélectionnez le nom de votre projet et voyez si tout va bien.

S'il y a encore des problèmes, je posterai des photos.

0
Steve Rosenberg

Semble être un problème d'espace de travail. Essayez de supprimer le projet d'un espace de travail et ajoutez-le à nouveau. Cela m'a aidé dans mon cas.

0
P_O

J'ai Xcode 6.3 et ai vu le même problème. Enfin, quelques modifications dans le fichier .h ont résolu mon problème. Si votre interface a IBOutlet défini comme 

@interface NavigationViewController :UIViewController
{
  IBOutlet UILabel *lblName;
}

changez ceci en et dans le fichier .m add @synthesize lblName;

@interface NavigationViewController :UIViewController
{
   __weak  UILabel *lblName;
}

@property (nonatomic, weak) IBOutlet UILabel *lblName;
0
Ram G.

J'avais ce même problème, sans aucun point de vue disponible pour se connecter. Le seul moyen de résoudre ce problème a été de changer le nom de la classe propriétaire du fichier XIB en "UIViewController", de créer le lien, puis de le rétablir dans la classe de contrôleur de vue personnalisée souhaitée. Le lien est resté et tout allait bien.

0
theaceofthespade

Essayez peut-être de supprimer la prise du menu dans le storyboard (dans votre capture d'écran) et faites-la glisser à nouveau de l'élément.

0
Antoine

J'avais le même problème. 

Il se trouve que j'ai renommé ma classe de contrôleur de vue et mon nom de fichier. Dans le storyboard, j'avais la valeur périmée dans le volet de droite, Classe personnalisée -> Classe. Ainsi, les IBOutlets ne s'alignaient pas car il n'y en avait pas dans la classe manquante, c'est là où ils s'attendaient à trouver les sorties définies.

Remplir le nom de classe correct du contrôleur de vue dans le champ Classe personnalisée du volet de droite a résolu mon problème.

XCode doit être plus détaillé si vous avez un mauvais nom de classe dans les champs Custom Class.

0
styler1972

J'avais ceci, qui affectait tous les projets de ma machine, Swift et Objective C, et me rendait fou depuis des lustres. Enfin, j'ai également remarqué que je ne pouvais pas utiliser le réfracteur pour renommer des classes non plus. 

La solution pour moi était:

  1. Fermer le xcode
  2. Supprimer ~/Bibliothèque/Développeur/Xcode/DerivedData (cela ne fonctionnait pas seul!)
  3. Supprimez toutes les données utilisateur pour tous mes projets en utilisant les éléments suivants du répertoire contenant tous mes projets, par exemple./src (soyez prudent avec cette commande!):

trouver . -name 'xcuserdata' -exec rm -rf {} \;

Si vous souhaitez le faire à la main, procédez comme suit pour tous vos projets Supprimez .xcodeproj/project.xcworkspace/xcuserdata Supprimez .xcodeproj/xcuserdata/.xcuserdatad

  1. Obtenez Spotlight pour réindexer le lecteur sur lequel tous mes projets étaient allumés (je ne sais pas si cela était nécessaire
  2. Redémarrer la machine

Tout est revenu dans la vie!

0
Tim Teece