J'ai ajouté un nouveau fichier nib à mon projet et j'ai essayé de le charger.
Cependant, lorsque je clique sur l'icône de la barre d'outils qui est censée m'amener à la vue que j'ai créée, j'obtiens un NSInternalInconsistencyException
avec le message:
Arrêt de l'application en raison d'une exception non interceptée 'NSInternalInconsistencyException', raison: '- [UIViewController _loadViewFromNibNamed: bundle:] a chargé la plume "..." mais la sortie de la vue n'a pas été définie.'
J'ai donc ouvert mon fichier nib, et je vois pour la vue qu'il n'y a pas de prises de référence définies. Cependant, j'essaie de cliquer et de faire glisser le cercle de "nouvelle prise de référence" vers le propriétaire du fichier, mais cela ne me laissera pas ... que dois-je faire pour que ma vue s'affiche?
Réponses:
Vous avez raison, mais comme je suis un nouveau venu, il m'a fallu un peu de temps pour comprendre toutes les étapes à suivre. Voici ce qui a fonctionné pour moi:
la source
MyViewController
est une sous-classe de sous-classe deUIViewController
et il n'y en a pasview
sous "Outlets". Si je sous-classeMyViewController
directement deUIViewController
la vue apparaît sous "Outlets". Magie ou bug de Xcode.Ceci est la proposition de Josh Justice, mais de manière graphique (les photos sont les miennes):
Enfin, le View Controller est instancié avec le code tournant:
la source
Je peux généralement le corriger en refaisant la connexion entre le propriétaire du fichier et la vue. Faites glisser la souris du propriétaire du fichier vers votre vue (dans IB) et sélectionnez la vue dans le menu local.
la source
L'identité de vue - Identité de classe n'a pas été définie. Après l'avoir défini sur la classe appropriée, le problème a été résolu.
la source
Êtes-vous sûr d'avoir une UIView (ou une sous-classe) affectée à la propriété "view" de votreViewController?
Faites un clic droit sur "Propriétaire du fichier" dans le volet gauche de la xib pour votre ViewController et vérifiez que la sortie "vue" est définie. Sinon, réglez-le sur une vue!
cela résoudra définitivement le problème
la source
Pour moi, toutes les choses indiquées ici https://stackoverflow.com/a/6395750/939501 étaient vraies, mais cela renvoyait une erreur, la raison était que j'ai créé une classe View avec le nom ABCView, puis supprimée plus tard.J'ai ajouté un contrôleur de vue en tant que ABCViewController donc en quelque sorte il faisait référence à l'ancien ABCView dans le nouveau contrôleur de vue, j'ai dû supprimer l'ABCViewController et en ajouter un nouveau avec un nom différent qui a résolu mon problème.
Merci
la source
J'ai eu le même problème avec XCode 4.6.3. J'avais commencé avec quelques fichiers nommés
MySettingsView.h
et les ai.m
supprimés en faveur deMySettingsViewController.h
, mais en dépit de la plupart des conseils mentionnés ici, il continuait à l'erreur,Il était évidemment toujours "confus", essayant de charger MySettingsView.xib au lieu de MySettingsView Controller .xib. Peut-être que sa logique "fais ce que je veux dire" est trop fantaisiste.
J'ai donc contourné le problème en codant en dur le nom NIB / XIB dans MySettingsViewController.m:
la source
Si vous utilisez une méthode xib pour créer une UIView et que vous rencontrez ce problème, vous remarquerez que vous n'aurez pas la sortie "view" sous le menu de l'inspecteur de connexions. Mais si vous définissez la classe personnalisée Propriétaires du fichier sur un UIViewController et que vous verrez alors la prise "view", que vous pouvez simplement CMND connecter une prise à CustomView.
la source
Mon problème avec cela a été causé par le fait d'avoir une plume en double dans le dossier de classe qui n'avait pas la vue définie. xcode semblait choisir une plume pour une construction, puis l'autre la prochaine fois que je construisais le projet. Je viens de supprimer l'autre. Cela semble bon. Ah!
la source
Je viens de passer plus d'une heure à essayer de comprendre pourquoi ma propriété de vue n'est pas définie dans mon contrôleur de vue lors de son lancement à partir de nib. N'oubliez pas d'appeler "[super initWithNibName ...]" à l'intérieur de initWithNibName de votre contrôleur de vue.
la source
Je viens de corriger ça dans le mien. Grand projet, deux fichiers. L'un était "ReallyLargeNameView" et un autre était "ReallyLargeNameViewController"
Sur la base de la 2e réponse choisie ci-dessus, j'ai décidé de nettoyer ma version. Nada, mais j'étais toujours suspect de XCode (comme j'ai deux classes identiques, je devrais les résumer mais hein ...) Donc on travaille, on ne fonctionne pas. Les noms des propriétaires des fichiers sont pour autant copiés et collés, les prises recrochées, xCode redémarré, toujours rien.
Je supprime donc la classe nommée similaire (qui est une vue). Bientôt, une nouvelle erreur "sortie à l'intérieur non connectée" était littéralement "webView pas la valeur clé" blah ... disant essentiellement "Visual Studio est meilleur". Quoi qu'il en soit ... j'efface le plus petit fichier nommé, et bam, ça marche.
XCode est confondu par des fichiers de nom similaire. Et le projet est assez grand pour nécessiter un redémarrage un peu, cela peut en faire partie.
J'aurais aimé avoir une réponse plus technique que "XCode est confus", mais bon, xCode se confond beaucoup à ce stade. Non confondu de la même manière que j'aiderais un petit enfant. Cela fonctionne maintenant, :) Devrait bénéficier aux autres si ce qui précède ne résout rien.
N'oubliez pas de nettoyer vos builds (en supprimant également le simulateur)
la source
J'ai également eu le même problème et mon problème était que j'ai ajouté une autre localisation (anglais) à la pointe ViewControllers afin que mon application avec la localisation allemande ne puisse pas trouver la pointe avec la localisation anglaise !! J'espère que cela aide n'importe qui!
la source
la source
Pour moi, le problème a été causé par l'appel
initWithNibName:bundle:
. J'utilise des cellules de vue tabulaire à partir d'un fichier nib pour définir les formulaires d'entrée qui s'y trouventtableViews
. Comme je n'ai pas de vue, cela n'a pas de sens de s'y accrocher. Au lieu de cela, si j'appelle lainitWithStyle:
méthode à la place, et à partir de là, je charge le fichier nib, alors les choses fonctionnent comme prévu.la source
Les réponses précédentes ont presque résolu le problème pour moi, mais la dernière étape manquait.
Maintenant, tous les @IBOutlets que vous ajoutez seront joints.
À la vôtre, Richard
la source
J'ai eu le même problème, mais une solution légèrement différente était nécessaire. Le problème dans ce cas était la classe du propriétaire du fichier plutôt que la classe de la vue. Pour définir cela, j'ai dû cliquer sur l'icône "lecture en arrière" dans le coin inférieur gauche de la fenêtre Interface Builder, et des options sont alors apparues qui isolaient les caractéristiques du propriétaire du fichier, du premier répondant et de la vue. Cliquer sur le premier (une grande boîte transparente), m'a permis de définir ensuite sa classe personnalisée comme suggéré ci-dessus.
la source
J'ai eu le même problème, mais une solution différente était nécessaire. Le problème dans ce cas était que la classe du propriétaire du fichier n'était pas connectée au fichier xib.
la source
J'ai rencontré quelque chose de très similaire ce soir, avec une sous-classe Swift UIViewController. Dans ce cas, aucun des correctifs ci-dessus n'a fonctionné, mais un peu de réorganisation de mon code l'a fait. Net-net, avoir une extension à la sous-classe se produit avant que la définition de la sous-classe elle-même dans le même fichier semble confondre XCode, malgré la compilation fine; le correctif consistait à placer les extensions après la définition de la sous-classe.
J'ai publié les détails dans une réponse à cette question similaire .
la source
Dans mon cas, l'initialiseur désigné
- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
dans la classe *** ViewController a été implémenté, donc même si lorsque j'appelle un autre initialiseur pour initialiser l'objet, l'initialiseur désigné sera appelé.Donc, pour résoudre ce problème, vérifier si
- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
c'est également un bon moyen.la source
J'ai rencontré ce problème d'une manière légèrement différente des autres réponses ici.
Si je créais simplement un nouveau fichier xib, y ajoutais un UIViewController dans Interface Builder et que je définissais la classe personnalisée de UIViewController sur mon contrôleur de vue, cela entraînait le blocage de la «sortie de la vue non définie». Les autres solutions ici disent de contrôler-faire glisser la sortie de la vue vers la vue, mais pour moi, la sortie de la vue était grisée et je ne pouvais pas la contrôler-la faire glisser.
J'ai compris que mon erreur était en ajoutant un UIViewController dans Interface Builder. Au lieu de cela, j'ai dû ajouter une UIView et définir la classe personnalisée du propriétaire du fichier sur mon contrôleur de vue. Ensuite, je pouvais contrôler-faire glisser la sortie de vue du propriétaire du fichier vers ma nouvelle vue UIView et tout fonctionnait comme il se doit.
la source
Juste eu la même erreur dans mon projet, mais une raison différente. Dans mon cas, j'avais une configuration IBOutlet avec le nom "View" dans ma classe UITableViewController personnalisée. Je savais que "view" était spécial parce que c'est un membre de la classe de base, mais je ne pensais pas que View (cas différent) serait également un problème. Je suppose que certaines zones de Cocoa ne sont pas sensibles à la casse, et le chargement d'un xib est probablement l'une de ces zones. Je viens donc de le renommer en DefaultView et tout va bien maintenant.
la source
sélectionnez le propriétaire des fichiers et allez ouvrir l'inspecteur d'identité donnez le nom de classe auquel il correspond. Si aucune des méthodes ci-dessus ne fonctionne et que vous ne pouvez toujours pas voir la sortie de la vue, donnez une nouvelle connexion de sortie de référence au propriétaire du fichier, vous pouvez alors voir la sortie de la vue. Cliquez sur la vue Outlet pour établir une connexion entre la vue Outlet et le propriétaire du fichier. Exécutez l'application, cela fonctionne bien.
la source
Dans mon cas, la vue n'a pas été visualisée en xib. en xib, la vue était de taille = aucune (4ème onglet à droite). J'ai défini la taille sur Freeform et rechargé xCode. la vue a été portée en appel et j'ai mis le lien approprié vers la vue.
la source
Si vous avez tout essayé et que vous obtenez toujours cette erreur, essayez de recréer le fichier de classe à partir de zéro, mais n'oubliez pas de cocher la case "Créer également un fichier XIB". Cela reliera automatiquement quelques éléments qui ne sont pas liés lors de la création de ces fichiers séparément. Après cela, vous pouvez probablement tout copier-coller sur le nouveau XIB et cela devrait fonctionner correctement.
Je trouve ce problème spécifiquement avec la création de fichiers séparément dans Swift.
la source
pour moi c'est arrivé, quand
UIView de ce ViewController doit être chargé sur l'autre vue en tant que sous-vue,
nous appellerons quelque chose comme ça
Où
Ici, loadView manquait ,,, l'ajout de cette ligne a résolu mon problème.
la source
J'ai eu le même problème, j'ai compris et c'est parce que j'avais coché " Cellules statiques " dans les propriétés de la vue Table sous l' option Contenu . A fonctionné quand il est devenu "
Dynamic Prototypes
". La capture d'écran est ci-dessous.la source
J'ai eu un problème similaire avec Xcode 9.3, et la définition de "Module" sous l'inspecteur d'attributs "Propriétaire du fichier" dans le module de projet a résolu ce problème pour moi.
la source
Ouvrez votre fichier de storyboard où votre viewController existe, ou un fichier lié à XIB avec textEdit.app et vérifiez si le storyboard ou le nom XIB est le même que celui de votre viewController, puis changez-le, enregistrez et rechargez / redémarrez Xcode.
la source
Si vous utilisez une méthode d'initialisation personnalisée, vérifiez que vous renvoyez quelque chose de valide. J'ai rencontré un morceau de code qui s'est écrasé sur quelque chose comme ceci:
Dans une autre classe, le contrôleur a été créé comme suit:
Le problème est que dans la méthode init, self n'a pas changé et devrait plutôt ressembler à ceci:
la source
J'aimerais seconder Stephen J. Parfois, X Code ne fait que se confondre. J'ai juste eu une expérience où j'avais beaucoup joué avec l'interface utilisateur, et j'avais ajouté et supprimé des points de vente à plusieurs reprises. Les points de vente ne voulaient tout simplement plus être câblés. Je n'ai jamais trouvé de raison spécifique (j'avais essayé toutes les solutions ci-dessus), et je devais simplement supprimer la NIB et la recréer à partir de zéro, et en fait j'ai dû utiliser un nom différent pour la NIB avant que cela fonctionne. (XCode 4.6.1) J'ai perdu quelques heures à ce sujet.
la source