Impossible de charger NIB dans le groupe

111

J'essaye d'intégrer Janrain Engage en tant que module personnalisé avec Appcelerator Titanium. J'ai créé un module d'exemple et déplacé le dossier JREngage vers l'exemple de module xcodeproj comme indiqué dans la documentation de Jainrain.

Maintenant, je donne la commande de construction à ce projet, puis j'exécute ./build.pyet enfin j'exécute la titanium runcommande. Il lance l'application dans le simulateur avec un écran vide et se bloque immédiatement en lançant l'erreur suivante.

Arrêt de l'application en raison d'une exception non interceptée 'NSInternalInconsistencyException', raison: 'Impossible de charger NIB dans le lot:' NSBundle </ Users / abhilash / Library / Application Support / iPhone Simulator / 4.2 / Applications / CA167346-4091-4E16-B841-955D1D391713 / test.app> (chargé) 'avec le nom' JRProvidersController ''

Pourquoi cette erreur pourrait-elle se produire?

Goje87
la source

Réponses:

213

Visitez les propriétés des fichiers .xib dans l'inspecteur de fichiers , la propriété "Target Membership" pitch sur la boîte de sélection, puis votre fichier xib a été lié à votre cible

sept livres
la source
2
De plus, si vous utilisez alloc init, au lieu de initWithNibName: bunle :, vous obtiendrez un écran noir.
Robert Childan
Vous vous demandez pourquoi un fichier .xib absolument inutilisé doit se bloquer dans un dossier de fichiers de projet…
Ben
Je suppose que j'ai accidentellement décoché cette case au lieu de la mise en page automatique. Correction du crash pour moi, merci
Yunus Nedim Mehel
toutes les cases à cocher des membres cibles sont grisées pour moi ... quelle pourrait en être la raison?
Stas
64

Dans Targets -> Build Phases

Assurez-vous que le .xib est ajouté Copy Bundle Resources, s'il n'est pas présent, ajoutez le fichier .xib.

kunalg
la source
A travaillé pour moi. Cela se produit généralement lorsque vous copiez / dupliquez un fichier xib. +1
VoidMain
22

essayer de tout savoir

XXXController = [[XXXControlloer alloc] initWithNibName:@"XXXController" bundle:nil];

dans votre code, et assurez-vous qu'ils XXXControllersont correctement orthographiés

chings228
la source
c'est facile, puisque le nibname n'est pas autotypé
chings228
1
Il voulait dire le nom de la classe juste avant l'alloc, qui est autotypé: P
Gil Sand
uiview pourrait être chargé à partir de la plume mais n'a pas de initWithNibName:bundle:méthode
Vyachaslav Gerchicov
nous parlons de viewcontroller
chings228
@ chings228 XXXControlloer et XXXController, voyez la différence
Zaporozhchenko Oleksandr
15

J'ai eu le même problème (exception «Impossible de charger NIB dans le bundle: ..») après la mise à niveau de mon xcode de 3.2 à 4.02. Alors que le déploiement de mon application avec Xcode 3.2 a bien fonctionné, il se bloque avec xcode 4 soulevant l'exception mentionnée ci-dessus - mais seulement lorsque j'ai essayé de déployer sur le simulateur IOS (v.4.2). Le ciblage du périphérique IOS (v.4.1) agissait également avec Xcode 4.

Il s'est avéré (après des heures de recherche désespérée) que la raison était un paramètre presque "caché" dans le fichier .xib:

Consultez les propriétés des fichiers .xib dans l'inspecteur de fichiers: La propriété 'Location' a été définie sur 'Relative to Group' pour tous les fichiers .xib. Je l'ai changé en «Relatif au projet» et voilà: tous les fichiers .xib sont maintenant correctement chargés dans le simulateur IOS!

Je n'ai aucune idée de la raison de ce comportement étrange de Xcode4, mais cela vaut peut-être la peine de faire une tentative?

creator_11
la source
Cela a résolu un crash auquel je faisais face lors de la compilation d'un plugin Quartz Composer très obsolète.
Peter Kazazes
12

Dans mon cas, c'était très étrange (utilisez un storyboard): pour une raison quelconque, il est passé de "Nom de base du fichier principal du storyboard" à "Nom de base du fichier nib principal" dans le plist.

Le retour au "Nom de base du fichier storyboard principal" (UIMainStoryboardFile) a résolu le problème

Tibidabo
la source
1
Bon. Avait le même problème. Merci. Cela l'a résolu.
Rameez Hussain
1
Cela a résolu mon problème! Je vous remercie. Je venais de dupliquer mon projet et de renommer tous les fichiers pertinents. Tout a fonctionné mais ça. Maintenant, tout fonctionne !!
BeccaP
11

l'erreur signifie qu'il n'y a pas de fichier .xib avec le "JRProvidersController"nom. revérifiez s'il JRProvidersController.xibexiste.

vous allez charger .xib fileavec

controller = [[JRProvidersController alloc] initWithNibName:@"JRProvidersController" bundle:nil];
Hanuman
la source
1
Hey Hanuman, j'ai vérifié que le fichier JRProvidersController.xib existe. J'ai également essayé de renommer le fichier et de l'exécuter, même dans ce cas, il lève la même exception.
Goje87
essayez de changer l'appel en initWithNibName: NSStringFromClass ([classe MyViewController]). Vérifiez également attentivement le nom du fichier car il est sensible à la casse
Hanuman
J'ai apporté les modifications suggérées par vous, mais je n'ai pas réussi.
Goje87
7

En utilisant une vue Swift personnalisée dans un contrôleur de vue Objective-C (oui, même après l'importation du <<PROJECT NAME>>-Swift.hfichier), j'avais essayé de charger la pointe en utilisant:

MyCustomView *customView = [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass([MyCustomView class]) owner:self options:nil] objectAtIndex:0];

... mais NSStringFromClass([MyCustomView class])revient <<PROJECT NAME>>.MyCustomViewet le chargement échoue. TL; DR Tout a bien fonctionné en chargeant la pointe en utilisant une chaîne littérale:

MyCustomView *customView = [[[NSBundle mainBundle] loadNibNamed:@"MyCustomView" owner:self options:nil] objectAtIndex:0];
Tom Howard
la source
6

La cible de construction étant l'un de mes appareils iOS, j'ai cliqué avec le bouton droit sur le fichier Produit (xyzw.app) et sélectionné l'élément contextuel Afficher dans le Finder. Il a ouvert une fenêtre avec le xyzw.app à l'intérieur; J'ai ouvert le paquet en utilisant Afficher le contenu du paquet et j'ai vu tous les fichiers que j'attendais, sauf un fichier, celui dont il se plaignait, avec un I majuscule au lieu d'un i minuscule dans le nom (zoomieVIew.nib au lieu de zoomieView.nib ). J'avais remarqué le I majuscule dans le nom de fichier du xib, je l'ai changé et reconstruit; apparemment, Xcode a laissé le nom .nib généré tel quel. J'ai supprimé zoomieVIew.nib dans le bundle, reconstruit et Xcode a dûment recréé le fichier en tant que zoomieView.nib. L'application a commencé à fonctionner sur l'appareil.

Michael Brian Bentley
la source
même chose ici que Michael décrit. j'avais créé un fichier xib contenant un UITableViewCell personnalisé. lorsque j'ouvre le .app et que je recherche myCell.xib, je vois que c'est en fait myCell.nib. De plus, l'application ne plantait que sur l'appareil et chargeait le fichier xib correctement lors de l'exécution sur le simulateur. il était un peu difficile de le réinitialiser. pour moi du moins. seulement lorsque j'ai supprimé le fichier, nettoyé la cible et copié le fichier - cela a-t-il fonctionné
Nir Pengas
balisé car il montre également un moyen facile de trouver et d'afficher le contenu du paquet
fotisgpap
doh. comment pourrais-je m'y remettre. merci gentil homme :)
j'étais
6

J'ai eu ce problème avec un storyboard et la pointe s'appelait quelque chose comme 'bKD-J3-fhr-view-ZSR-8m-2da'.

C'était parce que j'essayais d'ajouter une sous-vue à self.view dans l'initialisation d'un contrôleur de vue (withCoder). Self.view n'existe pas encore.

Je l'ai déplacé vers viewDidLoad et tout mieux!

Will Larche
la source
De même, j'ai eu une erreur comme celle-ci lorsque j'ai (bêtement) essayé d'affecter un délégué de vue de table et une source de données dans init () plutôt que viewDidLoad ()
jpb il y a
5

Regardez le projet

Target -> Buid Phases -> Copy Bundle Resources

Vous trouverez votre xib / storyborad de couleur rouge.

Supprimez-le simplement. Supprimez également toutes les références de fichier manquant du projet.

Maintenant, faites à nouveau glisser ce fichier storyboard / xib vers celui-ci Copy Bundle Resources. Il affichera toujours votre fichier avec une couleur rouge, mais ne vous inquiétez pas à ce sujet.

Juste nettoyer et construire le projet.

Vous allez maintenant relancer votre projet avec succès !!

iChirag
la source
1
Cela a résolu mon problème, puisque j'ai eu deux storyboards "MyStoryboard.storyboard" et "MyStoryboard ~ ipad.storyboad" ... donc de la cible iPad j'ai supprimé "MyStoryboard.storyboard" des "Copy Bundle Resources"
i89
5

Pour Storyboard

J'ai essayé toutes les solutions publiées ici mais rien n'a fonctionné pour moi car j'utilise Storyboard avec Swift 5.

Je viens de commencer à créer de nouveaux contrôleurs et des vues dans l'application de test de storyboard, ce que j'ai trouvé est que je manquais l'ID de storyboard de My View Controller.

Voici donc ma solution, si vous voulez aller de ViewController A -> View Controller B

Étape 1. Dans le storyboard: assurez-vous simplement que votre ViewControllerA est intégré dans le contrôleur de navigation

Étape 2. Dans le storyboard: Vérifiez maintenant que vous avez mentionné l'ID de Storyboard pour votre ViewControllerB que vous utiliserez dans le code comme identifiant.

entrez la description de l'image ici

Étape 3. et enfin assurez-vous que vous poussez le contrôleur de cette façon dans votre ViewControllerA en cliquant sur le bouton.

if let viewControllerB = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ViewControllerB") as? ViewControllerB {

            if let navigator = navigationController {
                navigator.pushViewController(viewControllerB, animated: true)
            }
        }
swiftBoy
la source
4

NE METTEZ PAS .xib LORSQUE VOUS INSÉREZ DANS LE NOM XIB! C'EST DÉJÀ IMPLICITE!

Ne faites pas ça:

 UIView *viewFromNib = [[NSBundle mainBundle] loadNibNamed:@"ResultsAssessmentView.xib" owner:self options:nil][0];

Faites ceci:

 UIView *viewFromNib = [[NSBundle mainBundle] loadNibNamed:@"ResultsAssessmentView" owner:self options:nil][0];
coolcool1994
la source
4

Exemple Swift4 si votre MyCustomView.swift et MyCustomView.xib dans un framework. Placez ceci dans l 'init de MyCustomView :

let bundle = Bundle(for: type(of: self))
let nib = UINib(nibName: "MyCustomView", bundle: bundle)
if let nibView = nib.instantiate(withOwner: self, options: nil).first as? UIView {
    self.aViewInMyCustomView = nibView
    self.aViewInMyCustomView.frame = self.frame
    self.addSubview(self.aViewInMyCustomView)
    // set constraints
    self.translatesAutoresizingMaskIntoConstraints = false
    NSLayoutConstraint(item: self.aViewInMyCustomView, attribute: .leading, relatedBy: .equal, toItem: self, attribute: .leading, multiplier: 1.0, constant: 0).isActive = true
    NSLayoutConstraint(item: self.aViewInMyCustomView, attribute: .trailing, relatedBy: .equal, toItem: self, attribute: .trailing, multiplier: 1.0, constant: 0).isActive = true
    NSLayoutConstraint(item: self.aViewInMyCustomView, attribute: .top, relatedBy: .equal, toItem: self, attribute: .top, multiplier: 1.0, constant: 0).isActive = true
    NSLayoutConstraint(item: self.aViewInMyCustomView, attribute: .bottom, relatedBy: .equal, toItem: self, attribute: .bottom, multiplier: 1.0, constant: 0).isActive = true
} 
norbDEV
la source
Finalement! Je travaille en projet modulaire d'iOS et c'est ce que je recherche. Je vous remercie!
Firda Sahidi le
qu'est-ce que aViewInMyCustomView?
famfamfam
@famfamfam: a UIView
norbDEV
tks, maintenant je sais comment utiliser
famfamfam
3

J'ai également trouvé que cela a échoué lorsque j'ai essayé de charger le XIB avec un nom comme @ "MyFile.xib". Quand je viens d'utiliser @ "MyFile", cela a fonctionné - apparemment, il ajoute toujours l'extension. Mais le message d'erreur disait simplement qu'il ne pouvait pas trouver MyFIle.xib dans le bundle - s'il avait dit MyFile.xib.xib, cela aurait été un gros indice.

Jonathan Starr
la source
La raison pour laquelle vous ne devez pas ajouter l'extension est que dans votre bundle compilé, les fichiers .xib sont également compilés dans des fichiers .nib. Il n'y avait donc pas de MyFile.xib dans votre bundle, sans parler de la double extension.
Pieter Jongsma
2

En travaillant sur Xcode 4.6.3 et en localisant mes fichiers NIB, je rencontre également ce problème.

Pour moi, rien d'autre n'a aidé à part changer la "gestion des versions de document" dans l'inspecteur de fichiers en déploiement 5.0 au lieu de 6.1.

krafter
la source
2

Cela se produit lorsque vous renommez le fichier nib. Si vous l'avez déjà fait, créez une nouvelle pointe (c'est-à-dire copiez le contenu du fichier de pointe actuel vers la nouvelle pointe), supprimez l'ancien fichier de pointe et cela résoudra votre problème.

Edit: Avec le nouveau Xcode à partir de la version 4.6.3, si vous renommez (avec la fonction refactor) la classe Controller, il renommera également le fichier nib et vous n'aurez pas à vous soucier du problème de chargement de la pointe.

NetDeveloper
la source
2

Je viens de vivre une expérience intéressante avec Xcode 6.3.

J'ai continué à recevoir cette erreur, malgré tout ce à quoi vous pensez normalement avec l'orthographe, l'appartenance à la cible, etc. comme suggéré ci-dessus. J'ai également essayé de nettoyer, de supprimer les données dérivées et de supprimer l'application du simulateur plusieurs fois pour m'assurer que le bundle était correctement construit, mais en vain.

Finalement, suite à la réponse de Brian Michael Bentley, j'ai finalement décidé d'inspecter mon fichier .app dans le dossier de mon simulateur sur mon HD. J'ai trouvé que tous mes nibs étaient là mais avec un abc ~ ipad.nib au lieu de l'abc.nib attendu. J'ai renommé manuellement tous ces fichiers pour supprimer la partie ~ ipad, construit et cela a fonctionné!

En essayant de voir pourquoi ceux-ci ont été ajoutés avec le mot-clé ~ ipad, j'ai regardé les paramètres de mon projet et en fait, dans mon onglet Général> Informations de déploiement, je n'avais sélectionné que l'iPad. J'essayais de courir sur un simulateur iPhone. Je pense que dans le passé, Xcode donnait une erreur indiquant que le binaire ne supportait pas l'iPhone et que vous ne parveniez pas à exécuter l'application.

J'ai supprimé l'application du simulateur et j'ai refait la même chose - encore une fois avec seulement iPad pris en charge. Cette fois, le .app contenait abc ~ iphone.nib ET abc ~ ipad.nib pour chaque storyboard attendu et il fonctionnait très bien sur le simulateur iPhone. Encore une fois - Si nous choisissons l'iPad uniquement dans nos paramètres d'informations de déploiement, il ne devrait pas fonctionner sur iPhone Simulator. C'est un bogue Xcode.

Donc, il y a un comportement incohérent ici de la part de Xcode et malheureusement c'est un bogue intermittent et cela peut être difficile à reproduire, mais je mets ceci ici pour que cela puisse aider d'autres à l'avenir.

Justin-Nicholas Y. Toyama
la source
2

Si ce même problème n'avait rien fonctionné, j'ai donc pensé à quelque chose de bizarre avec des données dérivées.

Dans xcode 6.3.2, je devais:

Dans le menu XCode -> Préférences -> Onglet Emplacements -> Dans Emplacements, remplacez les données dérivées par relatives, puis revenez à la valeur par défaut

Ensuite, la pointe s'est bien chargée.

Kevin
la source
Je viens de supprimer le dossier de données dérivées et cela a fonctionné. Semble être confus parce que j'avais renommé le fichier xib dans la navigation du projet. Un étrange.
Kyle Goslan le
2

Votre fichier XIB est probablement en dehors de votre dossier de projet. Cela conduit à ne pas afficher l'inspecteur de cible. Cependant, le déplacement du fichier XIB dans votre dossier de projet devrait le résoudre.

hhamm
la source
2

Attention: Xcode est sensible à la casse avec les noms de fichiers. Ce n'est pas la même chose «Fun» que «fun».

Oskarko
la source
Le nom de fichier de ma nib était FormItemCheckBoxCell.nib, la classe était FormItemCheckboxCell. Capitaliser "Box" dans le nom a coûté 45 minutes de ma vie.
SafeFastExpressive le
1

Si vous utilisez des frameworks dans votre projet, vous devez vous assurer que vous chargez à partir du bundle correct:

NSBundle *bundle = [NSBundle bundleWithIdentifier:@"<your bundle id here>"];
ABCViewController *vc = [[ABCViewController alloc] initWithNibName:@"<your nib name>" bundle:bundle];
David72
la source
1

pour moi, il a résolu simplement en changeant le nom du fichier de ma cellule en le même que sa classe.

Dans l'inspecteur d'attributs (troisième onglet sur la barre latérale droite du story-board):

  1. Définissez l'identifiant de la cellule (par exemple: "MyCellId"),
  2. Définissez la classe de la cellule (par exemple: "MyCellClass" lorsque le fichier est "MyCellClass"),
  3. Enregistrez la cellule dans votre contrôleur de vue comme suit:

    tableView.register (UINib (nibName: "MyCellClass", bundle: nil), forCellReuseIdentifier: "MyCellId")

Marjan Basiri
la source
0

J'ai eu ce problème en transformant mon ancien code de XCode 3x en XCode 4 et je l'ai résolu en renommant simplement wwwwwwww.xib en RootViewController.xib

Nikolay Frick
la source
0

J'ai rencontré le même problème. Dans mon cas, le nom de la plume était "MyViewController.xib" et je l'ai renommé en "MyView.xib". Cela a éliminé l'erreur.

Je déplaçais également un projet de XCode 3 vers 4.2. La modification du type de chemin n'a pas d'importance.

tête de navire
la source
0

La raison peut également être que le fichier est recherché dans le mauvais dossier spécifique à la langue lorsque vous avez perturbé les localisations.

MacMark
la source
0

Chaque fois que je refactore le nom d'un contrôleur de vue qui se trouve dans mon appDelegate, je perds du temps là-dessus. Le refactoring ne modifie pas le nom de la pointe dans initWithNibName: @ "MYOldViewControllerName".

nuagesurfin
la source
0

J'ai eu le même problème, renommer mon identifiant de contrôleur de vue dans le storyboard a fonctionné pour moi.

Dave
la source
0

J'ai remarqué que cela peut arriver si vous passez d'une branche à l'autre dans git et que vous oubliez de faire un clean. Donc xib est là et tout est trouvé, mais la construction exacte peut avoir des problèmes. Alors juste au cas où n'oubliez pas de faire un nettoyage

Ezeki
la source
0
SecondViewController *secondViewController = [[SecondViewController alloc]initWithNibName:@"SecondView.xib" bundle:nil];
    [self.navigationController pushViewController:secondViewController animated:YES];

Dans le code ci-dessus, si vous donnez également une extension de fichier comme "SecondView.xib", alors c'est faux et vous donnera l'erreur ci-dessus. Utilisez plutôt "SecondView". J'ai fait cette erreur.

NSPratik
la source
0

Cela fonctionne pour moi .. Assurez-vous que vous avez saisi correctement le nom de la plume.

[[NSBundle mainBundle] loadNibNamed: @ "Graphview" owner: self options: nil];

Graphview (nom de la pointe)

Narasimha Nallamsetty
la source