web-dev-qa-db-fra.com

Pointe chargée mais la sortie 'view' n'a pas été définie

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 censée m'amener à la vue que j'ai créée, je reçois une NSInternalInconsistencyException avec le message:

Arrêt de l'application en raison d'une exception non interceptée 'NSInternalInconsistencyException', raison: '- [UIViewController _loadViewFromNibNamed: bundle:] a chargé le nib "..." mais la sortie de vue n'a pas été définie. '

Alors j'ai ouvert mon fichier nib, et je vois pour la vue qu'il n'y a pas de sorties référencées définies. Cependant, j'essaie de cliquer et de faire glisser le cercle pour "nouvelle prise de référencement" vers le propriétaire de File, mais cela ne me laisse pas ... que dois-je faire pour que ma vue s'affiche?

672
John

L'identité de vue - Identité de classe n'a pas été définie. Après avoir défini la classe appropriée, le problème a été résolu.

59
John

Vous avez raison, mais comme je suis un nouveau venu, il m'a fallu un peu de temps pour comprendre toutes les étapes pour le faire. Voici ce qui a fonctionné pour moi:

  • Ouvrez le fichier XIB causant des problèmes.
  • Cliquez sur l'icône du propriétaire du fichier dans la barre de gauche (celle du haut, qui ressemble à une boîte soulignée en jaune)
  • Si vous ne voyez pas la barre de droite, cliquez sur la troisième icône au-dessus de "Voir" dans votre barre d’outils. Cela montrera la barre latérale droite
  • Dans la barre de droite, cliquez sur le troisième onglet - celui qui ressemble un peu à un journal.
  • Sous "Classe personnalisée" en haut, assurez-vous que Classe est le nom du ViewController qui devrait correspondre à cette vue. Si non, entrez-le

Custom class configuration

  • Dans la barre latérale droite, cliquez sur le dernier onglet - celui qui ressemble à un cercle avec une flèche
  • Vous devriez voir "points de vente" avec "vue" en dessous. Faites glisser le cercle à côté de celui-ci sur l'icône "Voir" sur la barre de gauche (celle du bas ressemble à un carré blanc avec un contour gris épais

Custom class configuration

  • Sauvegarder le fichier xib et relancer
1673
Josh Justice

C'est la proposition de Josh Justice, mais de manière graphique (les images sont les miennes):

  1. Sélectionnez le propriétaire du fichier
  2. Sur le panneau de droite, sélectionnez la classe personnalisée.
  3. Entrez le nom de la classe personnalisée

enter image description here

  1. Sur le panneau de droite, sélectionnez oultets
  2. Faites glisser la sortie de vue pour voir le composant

enter image description here

Enfin, le View Controller est instancié avec le code tournant:

        PTFilterUserVC *aFilterUserVC = [[PTFilterUserVC alloc] initWithNibName:@"FilterVC" bundle:nil];

        //OPTIONAL.This is how 'I' am interested in present the view controller.
        [self.navigationController pushViewController:aFilterUserVC animated:YES];

Je peux généralement résoudre ce problème en refaisant la connexion entre le propriétaire de File et la vue. Faites glisser le propriétaire du fichier tout en maintenant la touche Contrôle enfoncée dans votre vue (dans IB) et sélectionnez une vue dans le menu contextuel.

66
Rohit Mandiwal

Etes-vous sûr d'avoir une UIView (ou une sous-classe) assignée à la propriété "view" de yourViewController? 

Cliquez avec le bouton droit de la souris sur "File Owner" dans le volet de gauche de xib pour yourViewController et vérifiez que la sortie "view" est définie . Sinon, configurez-le en vue! 

cela résoudra définitivement le problème

26
Shehbaz Khan

J'ai eu le même problème avec XCode 4.6.3. J'avais commencé avec quelques fichiers nommés MySettingsView.h et .m, mais je les ai supprimés au profit de MySettingsViewController.h, mais malgré l'essentiel des astuces mentionnées ici, il y avait toujours des erreurs avec, 

2013-07-05 11: 48: 17.205 MyApp [39024: c07] *** Application terminée en raison d'une exception non capturée 'NSInternalInconsistencyException', raison: '- [UIViewController _loadViewFromNibNamed: bundle:] a chargé le fichier "MySettingsView" nib mais la sortie vue n'a pas été définie. '

Il était évidemment toujours "confus", en essayant de charger MySettingsView.xib au lieu de MySettingsView Controller . Xib. Peut-être que sa logique "fais ce que je veux dire" est trop sophistiquée.

J'ai donc contourné le problème en codant en dur le nom NIB/XIB dans MySettingsViewController.m:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:@"MySettingsViewController" bundle:nibBundleOrNil];
}
14
Nathan

Pour moi, toutes les choses mentionnées ici https://stackoverflow.com/a/6395750/939501 étaient vraies, mais cela restait une erreur de projection, car j’ai créé une classe View avec le nom ABCView, puis je l’ai supprimé plus tard. un contrôleur de vue comme ABCViewController, il faisait donc référence au vieil ABCView dans le nouveau contrôleur de vue. J'ai donc dû supprimer le logiciel ABCViewController et en ajouter un nouveau portant un nom différent, ce qui a résolu mon problème.

Merci

13
vishal dharankar

Mon problème avec cela a été causé par le fait que le dossier de la classe ne contenait pas de vue dupliquée. xcode semblait choisir un point pour une construction, puis l’autre la prochaine fois que je construisais le projet. Je viens de supprimer l'autre. Cela semble bon. Doh!

6
Matt

Si vous utilisez une méthode xib pour créer un UIView et rencontrez ce problème, vous remarquerez que vous ne disposerez pas de la sortie "view" dans 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 ensuite la sortie "view", vous pouvez simplement connecter CMND une sortie au CustomView.

5
user2965721

Je viens de fixer cela dans le mien. Grand projet, deux fichiers. L'un était "ReallyLargeNameView" et un autre "ReallyLargeNameViewController"

Sur la base de la deuxième réponse choisie ci-dessus, j'ai décidé de nettoyer mon build. Nada, mais j'étais toujours suspecte de XCode (comme j'ai deux classes identiques, il faut les abstraire mais hein ...) Donc, on travaille, on ne travaille pas. Les noms de propriétaires de fichiers sont pour autant copiés et collés, points de vente reconstitués, xCode redémarré, toujours rien.

Donc, je supprime la classe nommée similaire (qui est une vue). Bientôt, la nouvelle erreur "sortie à l'intérieur non raccordée" était littéralement "webView pas valeur clé" blah ... essentiellement dire "Visual Studio's better". Quoi qu'il en soit ... j'efface le fichier nommé plus petit, et bam, ça marche.

XCode est confondu par les fichiers portant le même nom. Et le projet est assez grand pour nécessiter un redémarrage un peu, cela en fait peut-être partie.

J'aimerais avoir une réponse plus technique que "XCode is confused", mais bon, xCode est très confus à ce stade. Je le confondais de la même manière que j'aiderais un petit enfant. Cela fonctionne maintenant, :) Devrait bénéficier les autres si ce qui précède ne résout rien.

N'oubliez jamais de nettoyer vos versions (en supprimant également le simulateur)

4
Stephen J

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. N'oubliez pas d'appeler "[super initWithNibName ...]" dans initWithNibName de votre contrôleur de vue.

4
Kamil.S

J'ai également eu le même problème et mon problème était que j'ai ajouté une autre localisation (anglais) à la plume ViewControllers afin que mon appli avec la localisation allemande ne puisse pas trouver la plume avec la localisation anglaise!! J'espère que cela aide n'importe qui!

3
Weini

J'ai fait face au même problème en supprimant accidentellement la référence xib et en l'ajoutant à nouveau. Je viens de corriger en établissant une connexion entre le propriétaire de Fichiers et le view.Aussi, assurez-vous que la classe personnalisée de votre FilesOwner correspond à votre viewController attendu.

3
Nidhin

Ouvrez votre fichier storyboard où votre viewController existe ou XIB fichier associé avec textEdit.app et vérifiez si le nom du storyboard ou du fichier XIB est identique à celui de votre viewController, puis modifiez-le, enregistrez et rechargez/redémarrez Xcode.

1
Alessandro Ornano

Dans mon cas, l'initialisateur désigné - (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil dans la classe ViewController *** a été implémenté, 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 la fonction - (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil est également appropriée.

1
lynulzy

Pour moi, le problème a été causé par l'appel de initWithNibName:bundle:. J'utilise des cellules de vue tableau d'un fichier nib pour définir des formulaires de saisie reposant sur tableViews. Comme je n'ai pas de vue, ça n'a pas de sens de se raccrocher à une. Au lieu de cela, si j'appelle la méthode initWithStyle: à la place, et à partir de là, je charge le fichier nib, les choses fonctionnent normalement.

1
DaveDude

J'ai eu le même problème, mais une solution différente a été appelée. Le problème dans ce cas était que la classe du propriétaire du fichier n'était pas connectée au fichier xib.

1
user1951454

J'ai eu le même problème, mais une solution légèrement différente a été appelée. 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, je devais cliquer sur l'icône "Lecture en arrière" dans le coin inférieur gauche de la fenêtre d'Interface Builder. Des options apparaissant isolaient les caractéristiques du propriétaire du fichier, du premier répondant et de la vue. En cliquant sur le premier (une grande boîte transparente), m'a permis de définir ensuite sa classe personnalisée comme suggéré ci-dessus.

1
Michael Stern

J'ai rencontré quelque chose de très similaire ce soir, avec une sous-classe de Swift UIViewController. Dans ce cas, aucun des correctifs ci-dessus n'a fonctionné, mais la réorganisation de mon code a un peu fonctionné. Net-net, ayant une extension à la sous-classe se produit avant que la définition de la sous-classe dans le même fichier ne semble confondre XCode, malgré une compilation correcte; le correctif consistait à placer les extensions après la définition de la sous-classe.

J'ai posté les détails dans une réponse à cette question similaire .

1
Justin Middleton

J'ai eu un problème similaire avec Xcode 9.3, et le réglage de "Module" sous l'inspecteur d'attributs "Propriétaire du fichier" sur le module de projet a résolu ce problème pour moi.

0
nananta

Dans mon cas, la vue n'a pas été vue dans xib . dans xib la vue était de taille = aucune (4ème onglet main droite). J'ai défini la taille sur Freeform et rechargé xCode . View a été interjeté appel et le lien approprié a été défini sur View.

0
OrdoDei

Si vous utilisez une méthode d'initialisation personnalisée, vérifiez que vous retournez quelque chose de valide. J'ai rencontré un morceau de code qui s'est écrasé sur quelque chose comme ceci:

- (id)init {
   self = [super init];
   if (self) {
      CustomController *controller = [[NSBundle mainBundle] loadNibNamed:NSStringFromClass(className) owner:self options:nil];
   } return self;
}

Dans une autre classe, le contrôleur a été créé comme suit:

CustomController *controller = [[CustomController alloc] init];

Le problème est que dans la méthode init, self n'a pas changé et devrait ressembler à ceci:

- (id)init {
   self = [super init];
   if (self) {
      CustomController *controller = [[NSBundle mainBundle] loadNibNamed:NSStringFromClass(className) owner:self options:nil];
      [controller viewDidLoad];
      self = controller;
   } return self;
}
0
Declan Land

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 Table View sous l'option Content. Travaillé quand il est passé à "Dynamic Prototypes". La capture d'écran est ci-dessous .  enter image description here

0
Saranjith

Je viens d'avoir 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'était un membre de la classe de base, mais je ne pensais pas que View (cas différent) poserait également un problème. Je suppose que certaines zones de Cocoa ne sont pas sensibles à la casse, et charger un xib en fait probablement partie. Donc, je viens de renommer DefaultView et tout va bien maintenant.

0
eselk

sélectionnez le propriétaire des fichiers et ouvrez l'inspecteur d'identité en indiquant le nom de la classe à laquelle il correspond. Si aucune des méthodes ci-dessus ne fonctionne et que vous ne pouvez toujours pas voir la sortie de visualisation, donnez une nouvelle connexion de prise de référence au propriétaire du fichier, vous pourrez alors voir la sortie de vue. Cliquez sur la vue vue pour établir une connexion entre la vue vue et le propriétaire du fichier. Exécutez l'application cela fonctionne bien.

0

pour moi c'est arrivé quand 

  • J'ai une classe ViewController (.mm/h) associée au fichier Nib,
  • UIView depuis ce ViewController doit être chargé sur une autre vue en tant que sous-vue,

  • nous appellerons quelque chose comme ça 

    -(void)initCheckView{
    
       CheckView *pCheckViewCtrl = [CheckView instance];
    
       pCheckView = [pCheckViewCtrl view];
    
       [[self view]addSubview:pCheckView];
    
       [pCheckViewCtrl performCheck];        
    
    }
    

Où 

+(CheckView *)instance{
    static CheckView *pCheckView = nil;
    static dispatch_once_t checkToken;

    dispatch_once(&checkToken, ^{
        pCheckView = [[CheckView alloc]initWithNibName:@"CheckView" bundle:nil];
        if ( pCheckView){
            [pCheckView initLocal];
            **[pCheckView loadView];**
        }
    });

    return pCheckView;

}

Ici loadView était manquant , l'ajout de cette ligne a résolu mon problème. 

0
Amitg2k12

J'aimerais seconder Stephen J. Parfois, le code X devient confus. Je viens de vivre une expérience où j'avais beaucoup joué avec l'interface utilisateur, et j'avais ajouté et supprimé plusieurs points de vente. Les points de vente ne seraient plus branchés. Je n'avais jamais trouvé de raison particulière (j'avais essayé toutes les solutions ci-dessus) et il me suffisait de supprimer le NIB et de le recréer à partir de zéro. En réalité, je devais utiliser un nom différent pour le NIB avant qu'il ne fonctionne. (XCode 4.6.1) Nous avons perdu quelques heures à ce sujet.

0
BrianH

Lorsque vous disposez d'un code Swift faisant référence à un espace de noms différent avec @objc, veillez à utiliser le nom de la classe Objective-C:

@objc(NamespacedSomeViewController)
class SomeViewController: UIViewController {
....

Dans ce cas, vous devez utiliser NamespacedSomeViewController dans l'IB.

0
Gomfucius

Les réponses précédentes presque ont résolu le problème pour moi, mais la dernière étape était manquante.

  1. Créez un fichier xib et Swift portant le même nom.

 Add View and Swift File

  1. Définissez le propriétaire du fichier sur la sous-classe UIView.

 enter image description here

  1. Faites glisser une prise de la vue vers la sous-classe UIView, nommez-la "contentView"

 add the contentview

  1. Ajoutez cet initialiseur personnalisé pour que, lorsque le fichier xib est chargé, il attache le contenu

 add the contentview as a subview

required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        Bundle(for: self.classForCoder).loadNibNamed("SampleView", owner: self, options: nil)
        addSubview(contentView)
        contentView.frame = self.bounds
        contentView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
    }

Maintenant, tous les @IBOutlets que vous ajoutez seront attachés.

À la vôtre, Richard

0
COSMO BAKER

Si vous avez tout essayé et que vous obtenez toujours cette erreur, essayez de recréer le fichier de classe à partir de rien, mais n'oubliez pas de cocher la case "Créer également un fichier XIB". Cela liera automatiquement quelques éléments qui ne sont pas liés lors de la création séparée de ces fichiers. Une fois que cela est créé, vous pouvez probablement tout copier/coller sur le nouveau fichier XIB et tout devrait bien fonctionner.

Je trouve ce problème spécifiquement avec la création de fichiers séparément dans Swift.

0
Travis M.