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?
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.
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:
C'est la proposition de Josh Justice, mais de manière graphique (les images sont les miennes):
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.
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
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];
}
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
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!
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.
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)
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.
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!
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.
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.
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.
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.
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.
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.
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 .
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.
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.
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;
}
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.
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.
pour moi c'est arrivé quand
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.
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.
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.
Les réponses précédentes presque ont résolu le problème pour moi, mais la dernière étape était manquante.
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
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.