2012-10-04 4 views
31

Dans mon AppDelegate, il y a un problème que je ne comprends pas. RootViewController 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-elle?NSInternalInconsistencyException ', raison:' Impossible de charger NIB en bundle: 'NSBundle

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 

Voici 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 à l'avance

+3

Essayez de nettoyer votre projet depuis 'Product-> Clean' – astuter

+0

Redémarrer le projet a fonctionné pour moi, – iYoung

+0

J'ai eu la fonction de langage de force, donc j'ai changé le paquet. chaînes et les fichiers HTML.Pour un fichier xib personnalisé, je suis confronté à ce problème ("Impossible de charger NIB en bundle") .Pls conseil ce que j'ai manqué? –

Répondre

73

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 référence"). Ensuite, après que vous pouvez ré-importer les fichiers dans votre projet et tout sera OK.

+0

J'ai refait le projet depuis le début, heureusement je venais juste de commencer –

+0

Pour moi les fichiers en question n'étaient même plus dans le projet. J'ai essentiellement suivi ce conseil, en les recopiant. Cependant, il a ensuite généré des erreurs de conformité de codage par clé. J'ai supprimé chaque sortie des vues rajoutées et le tour est joué. –

+0

Cela se produit même si vous renommez INSIDE Xcode. Xcode 5.x est vraiment vil. – Adam

17

Eh bien, je pense que l'erreur dit qu'il ne peut pas 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 demandez à charger un fichier nib nommé « RootViewController » .. !! Où est-ce..? Avez-vous un fichier xib nommé "Rootviewcontroller" ..?

+1

Oui, j'ai un fichier nib nommé RootViewController –

+0

k .. ainsi est votre fichier nib inclus dans la structure du projet .. ?? Je veux dire, est-ce visible dans le navigateur du projet ..? Si c'est le cas, essayez de le supprimer (utilisez 'remove references only' pendant la suppression) et faites-le glisser à nouveau dans xcode à partir du finder. nettoyer et construire. – akshaynhegde

+5

et encore une chose, assurez-vous que votre fichier nib est présent dans les "ressources bundle de copie" sous "phases de construction". – akshaynhegde

15

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

8

Je suis passé par le même problème un certain nombre de fois. Ce que j'ai trouvé pour moi-même, c'est que le fichier xib que je suis en train de lier serait toujours mal orthographié. Dans mon cas, cela est la ligne de code pour moi qui mènent à l'exception:

* NSArray nib = [[NSBundle mainBundle] loadNibNamed: @ "shelfcell" propriétaire: auto Options: néant];

Le "shelfcell" était mon nom de fichier xib. Mais j'avais mal orthographié comme "ShelfCell", "shelfCell" etc, ce qui conduit à l'exception. Alors, ne boguez pas trop votre tête. Vérifiez les lignes de code et les orthographes. Merci

+0

Cela m'a aidé avec mon problème. Dans mon cas, dans Swift, j'essayais de référencer un nibName et un identifiant de réutilisation en utilisant le même static et j'avais l'identifiant de réutilisation tapé incorrectement. –

+0

C'était tristement mon cas. Merci pour l'aide! – kinezu

3

Il ya tellement de raisons pour cette erreur.J'ai aussi obtenu un et résolu.

Il est possible que vous ajoutiez un framework tiers et que vous ne l'incluiez pas dans les ressources du Bundle de copie. Cela a résolu le problème pour moi.

Procédez comme suit. Aller à la cible -> BuildPhases -> CopyBundleResources -> Glissez et déposez votre cadre et exécutez le code.

0

Lors du développement de l'application ios, je suis également confronté à un problème similaire. Simple Redémarrage du xcode fonctionne pour moi. J'espère que cela aidera quelqu'un.

0

J'ai essayé plusieurs choses, enfin ce qui a fonctionné pour moi était de supprimer (et de placer dans la corbeille) le fichier .xib en question. Puis recréer le. Pour faciliter les choses, j'ai copié les choses dans le.xib temporairement à un autre fichier .xib, puis l'a copié dans le fichier nouvellement créé.

1

j'avais renommé un xib et eu ce problème, la solution pour moi était de modifier la principale window.xib manuellement et modifier le texte incriminé

recherche le nom de xib incriminé dans le xib concerné (vue en tant que source Code)

changé

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

avec

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

et cela a fonctionné

7

Cela peut également se produire si vous changez le nom de votre fichier xib, et vous oubliez de changer tous les endroits 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 changez le nom en SecondViewController et le fichier xib associé en SecondView.

Solution:

Ouvert MainWindow.xib (qui contient le TabBarController):

  • Sélectionnez l'onglet qui est pour le ViewController vous avez changé.
  • Dans l'inspecteur d'identité, remplacez le nom de la classe personnalisée par SecondViewController.
  • Dans l'inspecteur d'attributs, remplacez le nom xib par SecondView.

Ouvrir SecondView.xib (ceci a été copié à partir FirstView.xib):

  • Sur l'inspecteur Identity, changer la classe personnalisée à SecondViewController.

En option, vous devrez peut-être:

  • Faites un clic droit SecondView.xib, vérifiez que "Identité et Type-> Adhésion cible" est activée.
  • Assurez-vous que "Construire les Phases -> Copier les Ressources Bundle" montre votre SecondView.xib
  • J'ai aussi trouvé que j'avais besoin de construire occasionnellement et de supprimer l'application du simulateur pour obtenir la mise à jour du fichier xib. Le simulateur a un cache interne pour les fichiers xib qui est un peu incohérent.
8

J'ai quelques sous-projets.

J'ai résolu ce problème en ajoutant le fichier xib à la phase de construction de ressources de regroupement de principal projet.

+0

a travaillé pour moi .. – Yitzchak

0

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

5

Pour moi,

Je n'ai pas installé que dans la cible nib nécessaire.

Étape 1: Cliquez sur votre plume dans le navigateur du projet (dans l'onglet première à gauche)

Étape 2: Aller à Inspector File (dans l'onglet Première droite)

Étape 3 : Accédez à l'appartenance Cible et cochez la case dans laquelle vous souhaitez utiliser votre plume.

0

J'ai fait face à cette erreur beaucoup de temps, aussi recherche pourquoi cette erreur se produit et enfin, j'ai attrapé cette erreur, cette erreur une erreur idiote qui se produit lorsque nous avons mal orthographié .xib nom de fichier.

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

À ce stade, j'orthographié TableViewCell comme TabelViewCell, parce que la perception d'un certain temps, nous lisons comme correct, c'est le problème le plus commun. Copiez simplement votre nom de fichier .xib et collez-le.

0

Je mettais une option self.collectionView .backgroundColor dans init (codeur:... Constructeur de ma collection vc

Une fois que je l'ai déplacé que l'installation en viewDidLoad l'exception avait en quelque sorte disparu déroutante

Questions connexes