web-dev-qa-db-fra.com

NSInternalInconsistencyException ', raison:' Impossible de charger NIB dans le lot: 'NSBundle

Dans mon AppDelegate, il y a un problème que je ne comprends pas. RootViewController a initialement appelé ViewController et j'ai changé son nom. L'application est formée par de nombreux ViewController puis j'ai introduit un UINavigationController. Pourquoi cette erreur vient?

  NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle 
  /Users/XXXXXXXXXXXX/Library/Application Support/iPhone simulator/6.0/Applications/
  B7A7D461-1CFE-4B05-AF32-00B65FCFFF49/XXXXXXXXXX.app> (loaded)'with name 
 'RootViewController''

  *** First throw call stack:
  (0x1992012 0x1357e7e 0x1991deb 0x4bafac 0x37fe37 0x380418 0x380648 0x380882 0
  x380b2a  0x397ef5 0x397fdb x398286 0x398381 0x398eab 0x398fc9 0x399055 0x49e3ab 
  0x2ef92d 0x136b6b0 0x1f12fc0 0x1f0733c 0x1f12eaf 0x38e8cd 0x2d71a6 0x2d5cbf 
  0x2d5bd9 0x2d4e34 0x2d4c6e 0x2d5a29 0x2d8922 0x382fec 0x2cfbc4 0x2cfdbf 
  0x2cff55 0x2d8f67 0x2b30 0x29c7b7 0x29cda7 0x29dfab 0x2af315 0x2b024b 0x2a1cf8 
  0x1dbedf9 0x1dbead0 0x1907bf5 0x1907962 0x1938bb6 0x1937f44 0x1937e1b 0x29d7da
  0x29f65c 0x269d 0x25c5) 
  ibc++abi.dylib: terminate called throwing an exception
  (lldb) 

C'est le code dans AppDelegate.h

  #import <UIKit/UIKit.h>

  @class RootViewController;

  @interface AppDelegate : UIResponder <UIApplicationDelegate>{

       UINavigationController *navigationController;
   }

  @property (strong, nonatomic) UIWindow *window;

  @property (strong, nonatomic) RootViewController *viewController;
  @property (strong, nonatomic) UINavigationController * navigationController;



  @end

C'est le code de AppDelegate.m

  #import "AppDelegate.h"

  #import "RootViewController.h"



  @implementation AppDelegate

  @synthesize navigationController;
  @synthesize viewController;
  @synthesize window;



  - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:    (NSDictionary *)launchOptions
 {
         self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        // Override point for customization after application launch.

         if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
               self.viewController = [[RootViewController alloc]      initWithNibName:@"RootViewController_iPhone.xib" bundle:nil];
   } else {
    self.viewController = [[RootViewController alloc] initWithNibName:@"RootViewController_iPad.xib" bundle:nil];
   }

    RootViewController *rootMenu=[[RootViewController alloc]initWithNibName:@"RootViewController" bundle:nil];

    self.navigationController =[[UINavigationController alloc]initWithRootViewController:rootMenu];

    self.window.rootViewController = self.navigationController;
    [self.window makeKeyAndVisible];
    return YES;
}

Merci d'avance

37
Adriana Carelli

Cette erreur peut se produire lorsque vous renommez des fichiers en dehors de XCode . Pour le résoudre, vous pouvez simplement supprimer les fichiers de votre projet (clic droit - Supprimer et "Supprimer la référence").

Ensuite, vous pourrez réimporter les fichiers de votre projet et tout ira bien.

90
Daniel C.

Essayez simplement de supprimer le ".xib" du nom de nib dans "initWithNibName:" . Selon la documentation, le ".xib" est utilisé et ne doit pas être utilisé.

18
paiego

Eh bien, je pense que l'erreur indique qu'il est impossible de trouver un fichier nib nommé "RootViewController" dans votre projet. 

Vous écrivez ces lignes de code, 

self.viewController = [[RootViewController alloc]      initWithNibName:@"RootViewController_iPhone.xib" bundle:nil];

self.viewController = [[RootViewController alloc] initWithNibName:@"RootViewController_iPad.xib" bundle:nil];

En même temps, vous lui demandez de charger un fichier nib nommé "RootviewController" .. !! Où est-ce..? Avez-vous un fichier xib nommé "Rootviewcontroller" ..?

17
akshaynhegde

J'ai traversé le même problème un certain nombre de fois. Ce que j’ai découvert, c’est que le fichier xib que je lie serait toujours mal orthographié. Dans mon cas, il s’agit de la ligne de code qui mène à l’exception:

* NSArray nib = [[[NSBundle mainBundle]] loadNibNamed: @ "shelfcell" propriétaire: self options: nil];

La "shelfcell" était mon nom de fichier xib. Mais je l'avais mal orthographié comme "ShelfCell", "shelfCell", etc., ce qui a conduit à l'exception. Alors ne vous embêtez pas beaucoup la tête. Vérifiez les lignes de code et les orthographes. Je vous remercie

10
Reeshna

J'ai des sous-projets.

J'ai résolu ce problème en ajoutant un fichier xib à la phase de construction de Copy Bundle Resources de main project.

8
kaspartus

Cela peut également se produire si vous modifiez le nom de votre fichier xib et si vous oubliez de modifier tous les emplacements auxquels il est référencé.

Exemple: MainWindow.xib est un TabBarController qui contient un ViewController personnalisé nommé FirstViewController avec le fichier xib associé FirstView. Vous modifiez le nom en SecondViewController et le fichier xib associé en SecondView.

Solution:

Ouvrez MainWindow.xib (qui contient le TabBarController):

  • Sélectionnez l'onglet correspondant au ViewController que vous avez modifié.
  • Dans l'inspecteur d'identité, remplacez le nom de la classe personnalisée par SecondViewController.
  • Dans l'inspecteur d'attributs, remplacez le nom de xib par SecondView.

Ouvrez SecondView.xib (cela a été copié à partir de FirstView.xib):

  • Dans l'inspecteur d'identité, remplacez la classe personnalisée par SecondViewController.

Eventuellement, vous devrez peut-être:

  • Cliquez avec le bouton droit sur SecondView.xib, vérifiez que "Identité et type-> Appartenance à la cible" est activé.
  • Assurez-vous que "Build Phases -> Copy Bundle Resources" montre votre SecondView.xib
  • J'ai également constaté que j'avais parfois besoin de construire propre et de supprimer l'application du simulateur pour que le fichier xib soit réellement mis à jour. Le simulateur a un cache interne pour les fichiers xib un peu incohérent.
8
arinmorf

Pour moi,

Je n'ai pas installé cette plume dans la cible requise.

Étape 1: Cliquez sur votre pointe dans Project Navigator (c'est-à-dire dans le premier onglet de gauche)

Étape 2: Allez dans l’Inspecteur de fichiers (c.-à-d. Dans le premier onglet de droite)

Étape 3: Allez à l’adhésion à la cible et cochez la cible dans laquelle vous voulez utiliser votre plume.

6
Zaid Pathan

Il y a tellement de raisons à cette erreur. J'en ai aussi eu une et je l'ai résolue.

Il est possible que vous ajoutiez un cadre tiers et que vous ne l'incluiez pas dans la copie des ressources du regroupement.

Faites ceci comme suit. Allez à Target -> BuildPhases -> CopyBundleResources -> Glissez-déposez votre framework et exécutez le code.

3
Imran

J'ai passé une heure à chercher ce qui n'allait pas .. Mais Clean Project a fait l'affaire. 

Build -> Clean All

La solution acceptée fonctionne probablement aussi .. mais cela me suffisait.

1
Mitchell

Je mettais une self.collectionView facultative? .BackgroundColor dans The init (codeur: constructeur de ma collection vc.

Une fois que j'aurais déplacé cette configuration dans viewDidLoad, l'exception avait en quelque sorte disparu. déroutant.

1
Anton Tropashko

J'avais renommé xib et avais ce problème, la solution pour moi était d'éditer manuellement le fichier window.xib principal et de changer le texte incriminé.

rechercher le nom de la bibliothèque xib incriminé dans la bibliothèque xib correspondante (afficher le code source)

modifié

<viewController nibName="OldNibName" id="116" customClass="SomeViewController">

avec

<viewController nibName="NewNibName" id="116" customClass="SomeViewController">

et cela a fonctionné

1
gheese

Assurez-vous également que le fichier XIB est inclus dans votre cible. Vérifiez l'inspecteur de fichier lorsque le fichier XIB est sélectionné (premier onglet à droite, au milieu, section "Appartenance à la cible". La cible pour laquelle vous créez doit être cochée, sinon le fichier XIB ne sera pas inclus.

1
Steven Delrue

J'ai essayé plusieurs choses, finalement ce qui a fonctionné pour moi a été de supprimer (et de déplacer à la corbeille) le fichier .xib en question. Puis recréez-le. Pour faciliter les choses, j'ai copié temporairement les fichiers contenus dans le fichier .xib dans un autre fichier .xib, puis je les ai copiés dans le fichier créé. 

0
guptron

J'avais cette erreur lorsque j'essayais d'ajouter gestureRecognizer à la vue de mon ViewController et que la cible était la vue au lieu d'être autonome:

Au lieu de:

self.view.addGestureRecognizer(UITapGestureRecognizer(target: self.view, action: #selector(handleTap(_:))))

Fixé à:

self.view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleTap(_:))))

Et l'erreur était partie. 

0
sabius

J'ai fait face à cette erreur beaucoup de temps, cherchez également pourquoi cette erreur se produit et, finalement, j'ai attrapé cette erreur, cette erreur est une erreur stupide qui se produit lorsque nous avons mal orthographié le nom de fichier .xib.

NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"TableViewCell" owner:self options:nil];

À ce stade, j’ai mal orthographié TableViewCell en TabelViewCell, car c’est la perception que nous avons lue comme correcte, c’est le problème le plus courant… .. Copiez simplement votre nom de fichier .xib et collez-le.

0
Rahul Panzade

Lors du développement de l'application iOS, je suis également confronté au même type de problème. Le redémarrage simple du xcode fonctionne pour moi. J'espère que cela aidera quelqu'un.

0
kttailor4u