2012-10-04 24 views
31

Nel mio AppDelegate c'è un problema che non capisco. RootViewController inizialmente chiamato ViewController e ho cambiato il nome. L'applicazione è formata da molti ViewController, quindi ho introdotto un UINavigationController. Perché questo errore arriva?NSInternalInconsistencyException ', motivo:' Impossibile caricare NIB in 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) 

Questo è il codice in 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 

Questo è il codice di 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; 
} 

Grazie in anticipo

+3

Prova a pulire il tuo progetto da 'Prodotto-> Pulisci' .Mi ha lavorato per me. – astuter

+0

Il progetto ha funzionato per me, – iYoung

+0

Ho avuto la funzione di linguaggio forzato, quindi ho cambiato il pacchetto. Dopo aver cambiato la lingua, ho potuto caricare localizzato stringhe e file HTML. Ma per un file xib personalizzato, sono di fronte a questo problema ("Impossibile caricare NIB in bundle"). Pls consiglio cosa mi sono perso? –

risposta

73

Questo errore può verificarsi quando si rinomina file al di fuori di XCode. Per risolverlo è sufficiente rimuovere i file dal progetto (clic destro - Elimina e "Rimuovi riferimento").

Quindi dopo è possibile reimportare i file nel progetto e tutto sarà OK.

+0

Ho rifatto il progetto dall'inizio, per fortuna avevo appena iniziato –

+0

Per me i file in questione non erano nemmeno più nel progetto. In sostanza, ho seguito questo consiglio, copiandolo di nuovo. Tuttavia, ha poi gettato errori di conformità alla codifica della chiave. Ho eliminato ogni punto vendita dalle viste aggiunte e voilà ha funzionato. –

+0

Ciò accade anche se RINOMINA INSIDE Xcode. Xcode 5.x è veramente vile. – Adam

17

Beh, credo che l'errore dice che non può trovare un file pennino chiamato "RootViewController" nel tuo progetto.

Si sta scrivendo queste righe di codice,

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

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

Allo stesso tempo, si sta chiedendo per caricare un file nib denominato "RootViewController" .. !! Dov'è..? Hai un file xib chiamato "Rootviewcontroller" ..?

+1

Sì, ho un file pennino chiamato RootViewController –

+0

k .. quindi il file pennino è incluso nella struttura del progetto .. ?? Voglio dire, è visibile nel navigatore del progetto ..? In tal caso, provare a eliminarlo (utilizzare 'remove references only' durante l'eliminazione) e trascinarlo nuovamente su xcode dal finder. pulisci e costruiscilo. – akshaynhegde

+5

e un'altra cosa, assicurati che il tuo file pennino sia presente nelle "risorse del pacchetto di copia" in "fasi di compilazione". – akshaynhegde

15

Basta provare a rimuovere ".xib" dal nome del pennino in "initWithNibName:". Secondo la documentazione, il ".xib" è assunto e non dovrebbe essere usato.

8

Ho affrontato lo stesso problema un certo numero di volte. Quello che ho trovato per me è che il file xib che sto collegando sarebbe sempre errato. Nel mio caso, questa è la linea di codice per me che portano a l'eccezione:

* NSArray pennino = [[NSBundle mainBundle] loadNibNamed: @ "shelfcell" il proprietario: opzioni self: nil];

Il "shelfcell" era il mio nome file xib. Ma ho sbagliato a scriverlo come "ShelfCell", "shelfCell" ecc., Che ha portato all'eccezione. Quindi non infastidire la tua testa molto. Controlla le linee di codice e le grafie. Grazie

+0

Questo mi ha aiutato con il mio problema. Nel mio caso, in Swift, stavo cercando di fare riferimento a un nibName e un identificatore di riutilizzo usando la stessa statica e avevo l'identificatore di riutilizzo digitato in modo errato. –

+0

Questo è stato purtroppo il mio caso. Grazie per l'aiuto! – kinezu

3

Ci sono tanti motivi per questo errore. Ne ho anche preso uno e l'ho risolto.

È possibile che si stia aggiungendo un framework di terze parti e non lo si includa nelle risorse del pacchetto di copia. Ciò ha risolto il problema per me.

Procedere come segue. Vai a Destinazione -> BuildPhases -> CopyBundleResources -> Trascina e rilascia il tuo framework ed esegui il codice.

0

Durante lo sviluppo dell'applicazione ios, anch'io mi trovo ad affrontare un problema simile. Il riavvio semplice di xcode funziona per me. Spero che questo possa aiutare qualcuno.

0

Ho provato diverse cose, infine quello che ha funzionato per me era eliminare (e spostare nel cestino) il file .xib in questione. Quindi ricrearlo. Per semplificare le cose, ho copiato le cose nel.xib temporaneamente su un altro .xib, quindi copiato nuovamente in quello appena creato.

1

avevo rinominato un XI ter e aveva questo problema, la soluzione per me è stato quello di modificare il window.xib principale manualmente e modificare il testo incriminato

ricerca del nome incriminato XI ter nel XI ter rilevante (vista come fonte codice)

cambiato

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

con

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

e ha funzionato

7

Ciò può verificarsi anche se si modifica il nome del file xib e si dimentica di modificare tutti i punti a cui viene fatto riferimento.

Esempio: MainWindow.xib è un TabBarController che contiene un ViewController personalizzato denominato FirstViewController con il file xib associato FirstView. Si modifica il nome in SecondViewController e il file xib associato in SecondView.

Soluzione:

aperta MainWindow.xib (che contiene il TabBarController):

  • Selezionare la scheda che è per il ViewController è stata modificata.
  • Nella finestra di ispezione Identità, modificare il nome della classe personalizzata in SecondViewController.
  • Nella finestra di ispezione attributi, modificare il nome xib in SecondView.

Apri SecondView.xib (questo è stato copiato da FirstView.xib):

  • Sul ispettore di identità, cambiare la classe personalizzata per SecondViewController.

Opzionalmente potrebbe essere necessario:

  • Right click SecondView.xib, verificare che "Identità e Type-> Target Abbonamento" è abilitato.
  • Assicurati che "Fasi di creazione -> Copia risorse di bundle" mostri il tuo SecondView.xib
  • Ho anche trovato che occasionalmente avevo bisogno di compilare la parte pulita ed eliminare l'app dal simulatore per far sì che il file xib fosse effettivamente aggiornato. Il simulatore ha una cache interna per i file xib che è un po 'incoerente.
8

Ho alcuni sottoprogetti.

Ho risolto questo problema aggiungendo il file xib alla fase di creazione delle copie del bundle del progetto principale principale.

+0

ha funzionato per me .. – Yitzchak

0

Assicurarsi inoltre che il file XIB sia incluso nella destinazione. Controlla la finestra di ispezione del file quando il file XIB è selezionato (prima scheda sulla destra, al centro c'è la sezione "appartenenza al target" .La destinazione che hai creato deve essere selezionata, altrimenti il ​​file XIB non sarà incluso.

5

Per me,

non ho installato che pennino nel target richiesto.

Fase 1: Clicca sul pennino in Project Navigator (cioè in scheda prima a sinistra)

Fase 2: Selezionare File Inspector (cioè in prima scheda a destra)

Fase 3 : Passa all'appartenenza a Target e spunta sulla destinazione in cui desideri utilizzare il pennino.

0

Ho affrontato questo errore un sacco di tempo, anche la ricerca del motivo per cui questo errore si verifica e, infine, ho rilevato questo errore, questo errore un errore stupido che si verifica quando abbiamo errato il nome del file .xib.

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

A questo punto, io errano TableViewCell come TabelViewCell, perché la percezione di qualche tempo si legge come corretta, questo è il problema più comune. Basta copiare il nome del file .xib e incollarlo.

0

stavo installando un self.collectionView opzionale .backgroundColor nel init (coder:?... Costruttore della mia collezione vc

Una volta che avrò mosso che l'installazione nel viewDidLoad eccezione aveva in qualche modo sconcertante scomparsa

Problemi correlati