Impossibile caricare NIB nel bundle


111

Sto cercando di integrare Janrain Engage come modulo personalizzato con Appcelerator Titanium. Ho creato un modulo di esempio e ho trascinato la cartella JREngage nel modulo di esempio xcodeproj come indicato nella documentazione di Jainrain.

Ora do il comando build a questo progetto, quindi eseguo ./build.pye infine eseguo il titanium runcomando. Avvia l'applicazione nel simulatore con uno schermo vuoto e si blocca immediatamente generando il seguente errore.

Chiusura dell'app a causa di un'eccezione non rilevata "NSInternalInconsistencyException", motivo: "Impossibile caricare NIB nel bundle:" NSBundle </ Users / abhilash / Library / Application Support / iPhone Simulator / 4.2 / Applications / CA167346-4091-4E16-B841-955D1D391713 / test.app> (caricato) 'con nome' JRProvidersController ''

Perché potrebbe verificarsi questo errore?

Risposte:


213

Visita le proprietà dei file .xib nella finestra di ispezione dei file , la proprietà "Appartenenza a destinazione" nella casella di selezione, quindi il tuo file xib è stato collegato al tuo obiettivo


2
Inoltre, se stai usando alloc init, invece di initWithNibName: bunle :, otterrai una schermata nera.
Robert Childan

Chiedendosi perché un file .xib assolutamente inutilizzato deve essere bloccato in una cartella di file di progetto ...
Ben

Immagino di aver deselezionato accidentalmente questa casella di controllo anziché il layout automatico. Risolto l'incidente per me, grazie
Yunus Nedim Mehel

tutte le caselle di controllo dell'abbonamento target sono disattivate per me ... quale potrebbe essere il motivo?
Stas

64

Nel Targets -> Build Phases

Assicurati che il .xib sia aggiunto Copy Bundle Resources, se non è presente, aggiungi il file .xib.


Ha funzionato per me. Questo di solito accade quando si copia / duplica un file xib. +1
VoidMain

22

prova a scoprire tutto

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

nel codice e assicurati che XXXControllersia scritto correttamente


è facile, dal momento che il nome del pennino non è tipizzato automaticamente
chings228

1
Intendeva il nome della classe appena prima dell'allocazione, che è stato digitato automaticamente: P
Gil Sand

uiview potrebbe essere caricato dal pennino ma non ha initWithNibName:bundle:metodo
Vyachaslav Gerchicov

stiamo parlando di viewcontroller
chings228

@ chings228 XXXControlloer e XXXController, vedi la differenza
Zaporozhchenko Oleksandr

15

Ho avuto lo stesso problema (eccezione "Impossibile caricare NIB nel pacchetto: ..") dopo aver aggiornato il mio xcode da 3.2 a 4.02. Considerando che la distribuzione della mia app con Xcode 3.2 ha funzionato bene, si arresta in modo anomalo con xcode 4 sollevando l'eccezione sopra menzionata, ma solo quando ho provato a eseguire la distribuzione su IOS Simulator (v.4.2). Il targeting del dispositivo IOS (v.4.1) ha funzionato anche con Xcode 4.

Si è scoperto (dopo ore di disperatamente frugare in giro) che il motivo era un'impostazione quasi "nascosta" nel file .xib:

Visita le proprietà dei file .xib nella finestra di ispezione dei file: la proprietà "Posizione" è stata impostata su "Relativo al gruppo" per tutti i file .xib. L'ho cambiato in "Relativo al progetto" e voilà: tutti i file .xib ora sono caricati correttamente nel simulatore IOS!

Non ho idea di quale sia la ragione dietro questo strano comportamento di Xcode4 ma forse vale la pena fare un tentativo?


Questo ha risolto un crash con cui avevo a che fare durante la compilazione di un plugin Quartz Composer molto obsoleto.
Peter Kazazes

12

Nel mio caso è stato molto strano (usa uno storyboard): per qualche motivo è cambiato da "Main storyboard file base name" a "Main nib file base name" nel plist.

Ritornare a "Nome base del file storyboard principale" (UIMainStoryboardFile) ha risolto il problema


1
Bene. Ho avuto lo stesso problema. Grazie. Questo l'ha risolto.
Rameez Hussain

1
Questo ha risolto il mio problema! Grazie. Avevo appena duplicato il mio progetto e rinominato tutti i file pertinenti. Tutto ha funzionato tranne questo. Ora funziona tutto !!
BeccaP

11

l'errore significa che non esiste un file .xib con "JRProvidersController"nome. ricontrollare se JRProvidersController.xibesiste.

caricherai .xib filecon

controller = [[JRProvidersController alloc] initWithNibName:@"JRProvidersController" bundle:nil];

1
Ehi Hanuman, ho controllato che il file JRProvidersController.xib esista. Ho anche provato a rinominare il file ed eseguirlo, anche in questo caso genera la stessa eccezione.
Goje87

provare a modificare la chiamata in initWithNibName: NSStringFromClass ([classe MyViewController]). Controlla anche attentamente il nome del file in quanto distingue tra maiuscole
Hanuman


Ho apportato le modifiche suggerite da te, ma non ho avuto successo.
Goje87

7

Utilizzando una visualizzazione Swift personalizzata in un controller di visualizzazione Objective-C (sì, anche dopo aver importato il <<PROJECT NAME>>-Swift.hfile), ho provato a caricare il pennino usando:

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

... ma NSStringFromClass([MyCustomView class])ritorna <<PROJECT NAME>>.MyCustomViewe il caricamento fallisce. TL; DR Tutto ha funzionato bene caricando il pennino usando una stringa letterale:

MyCustomView *customView = [[[NSBundle mainBundle] loadNibNamed:@"MyCustomView" owner:self options:nil] objectAtIndex:0];

6

Con l'obiettivo di build come uno dei miei dispositivi iOS, ho fatto clic con il pulsante destro del mouse sul file del prodotto (xyzw.app) e ho selezionato l'elemento popup Mostra nel Finder. Ha aperto una finestra con xyzw.app all'interno; Ho aperto il pacchetto utilizzando Mostra contenuto pacchetto e ho visto tutti i file che mi aspettavo, tranne un file, quello di cui si lamentava, con una I maiuscola invece di una i minuscola nel nome (zoomieVIew.nib invece di zoomieView.nib ). Avevo notato la I maiuscola nel nome del file xib, l'ho modificata e ricostruita; apparentemente Xcode ha lasciato il nome .nib generato com'era. Ho eliminato zoomieVIew.nib nel bundle, ricostruito e Xcode ha debitamente ricreato il file come zoomieView.nib. L'app ha iniziato a funzionare sul dispositivo.


la stessa cosa qui che sta descrivendo Michael. avevo creato un file xib con un UITableViewCell personalizzato. quando apro il .app e cerco myCell.xib, vedo che in realtà è myCell.nib. inoltre, l'app si bloccava solo sul dispositivo e caricava il file xib correttamente durante l'esecuzione sul simulatore. è stato un po 'complicato resettarlo. almeno per me. solo quando ho cancellato il file, pulito la destinazione e copiato il file, ha funzionato.
Nir Pengas

contrassegnato in quanto mostra anche un modo semplice per trovare e visualizzare il contenuto della confezione
fotisgpap

doh. come potrei arrivare di nuovo a questo. grazie uomo gentile :) ero all'inizio della ricerca di questo problema
heximal

6

Ho avuto questo problema con uno storyboard e il pennino è stato chiamato qualcosa come "bKD-J3-fhr-view-ZSR-8m-2da".

È stato perché stavo cercando di aggiungere una sottoview a self.view nell'init di un controller di visualizzazione (withCoder). Self.view non esiste ancora.

Spostato in viewDidLoad e tutto meglio!


5

Dai un'occhiata al progetto

Target -> Buid Phases -> Copy Bundle Resources

Troverai il tuo xib / storyborad con il colore rosso.

Rimuovilo e rimuovi anche tutti i riferimenti del file mancante dal progetto.

Ora trascina di nuovo questo file storyboard / xib su questo Copy Bundle Resources. Ti mostrerà ancora il file con il colore rosso ma non preoccuparti.

Basta pulire e costruire il progetto.

Ora il tuo progetto verrà riavviato con successo !!


1
Questo ha risolto il mio problema, dal momento che avevo due storyboard "MyStoryboard.storyboard" e "MyStoryboard ~ ipad.storyboad" ... quindi dal target iPad ho rimosso "MyStoryboard.storyboard" dalle "Copy Bundle Resources"
i89

5

Per Storyboard

Ho provato ogni singola soluzione pubblicata qui ma niente ha funzionato per me poiché sto usando Storyboard con Swift 5.

Ho appena iniziato a creare nuovi controller e visualizzazioni nell'app di test dello storyboard, quello che ho trovato è che mi mancava l'ID dello storyboard del mio controller di visualizzazione.

Quindi ecco la mia soluzione, se vuoi andare da ViewController A -> Visualizza controller B.

Passaggio 1. Nello storyboard: assicurati che il tuo ViewControllerA sia incorporato nel controller di navigazione

Passaggio 2. Nello storyboard: ora controlla di aver menzionato l'ID dello storyboard per il tuo ViewControllerB che utilizzerai nel codice come Identificatore.

inserisci qui la descrizione dell'immagine

Passaggio 3. e infine assicurarsi di premere il controller in questo modo nel ViewControllerA con il clic del pulsante.

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

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

4

NON METTERE .xib QUANDO SI INSERISCE NOME XIB! È GIÀ IMPLICITO!

Non farlo:

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

Fai questo:

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

4

Esempio Swift4 se il tuo MyCustomView.swift e MyCustomView.xib in un framework. Inseriscilo nell'init di 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
} 

Finalmente! Lavoro in un progetto modulare di iOS e questo è quello che sto cercando. Grazie!
Firda Sahidi

che cos'è aViewInMyCustomView?
famfamfam

@famfamfam: a UIView
norbDEV

tks, ora so come usare
famfamfam

3

Ho anche scoperto che non è riuscito quando ho provato a caricare l'XIB con un nome come @ "MyFile.xib". Quando ho appena usato @ "MyFile" ha funzionato - a quanto pare aggiunge sempre l'estensione. Ma il messaggio di errore diceva semplicemente che non riusciva a trovare MyFIle.xib nel bundle - se avesse detto MyFile.xib.xib, sarebbe stato un grande indizio.


Il motivo per cui non è necessario aggiungere l'estensione è che nel bundle compilato, anche i file .xib vengono compilati in file .nib. Quindi in realtà non c'era un MyFile.xib nel tuo bundle, a prescindere dalla doppia estensione.
Pieter Jongsma

2

Lavorando su Xcode 4.6.3 e localizzando i miei file NIB, ho riscontrato anche questo problema.

Per me nient'altro ha aiutato oltre a cambiare "Document Versioning" in File Inspector in Deployment 5.0 invece di 6.1.


2

Succede quando rinomini il file pennino. Se lo hai già fatto, crea un nuovo pennino (ovvero copia il contenuto del file pennino corrente su un nuovo pennino), elimina il vecchio file pennino e risolverà il tuo problema.

Modifica: con il nuovo Xcode a partire dalla versione 4.6.3, se si rinomina (con la funzione di refactoring) la classe Controller, verrà rinominato anche il file pennino e non è necessario preoccuparsi del problema di caricamento del pennino.


2

Ho appena avuto un'esperienza interessante usando Xcode 6.3.

Ho continuato a ricevere anche questo errore, nonostante avessi provato tutto ciò a cui normalmente penseresti con ortografia, appartenenza target, ecc. Come suggerito sopra. Ho anche provato a pulire, eliminare i dati derivati ​​e anche a eliminare l'app dal simulatore più volte per assicurarmi che il pacchetto fosse costruito correttamente ma senza alcun risultato.

Alla fine, seguendo la risposta di Brian Michael Bentley, ho finalmente deciso di ispezionare il mio file .app nella cartella del mio simulatore sul mio HD. Ho scoperto che tutti i miei pennini erano lì, ma con un abc ~ ipad.nib invece del previsto abc.nib. Ho rinominato manualmente tutti questi file per rimuovere la parte ~ ipad, costruito e ha funzionato!

Cercando di vedere perché questi sono stati aggiunti con la parola chiave ~ ipad, ho guardato le impostazioni del mio progetto e infatti, nella mia scheda Generale> Informazioni di distribuzione, avevo selezionato solo iPad. Stavo cercando di eseguire su un simulatore di iPhone. Credo che in passato Xcode avrebbe fornito un errore indicando che il binario non supportava iPhone e non saresti riuscito a eseguire l'app.

Ho eliminato l'app dal simulatore e ho fatto di nuovo la stessa cosa, di nuovo con il solo iPad supportato. Questa volta, il .app conteneva abc ~ iphone.nib E abc ~ ipad.nib per ogni storyboard previsto e funzionava perfettamente sul simulatore di iPhone. Ancora una volta: se scegliamo iPad solo nelle nostre impostazioni delle informazioni di distribuzione, non dovrebbe funzionare su iPhone Simulator. Questo è un bug di Xcode.

Quindi, c'è un comportamento incoerente qui da parte di Xcode e sfortunatamente è un bug intermittente e questo potrebbe essere difficile da riprodurre, ma lo metto qui in modo che possa aiutare altri in futuro.


2

Se lo stesso problema non avesse funzionato nulla, quindi ho pensato qualcosa di strano con i dati derivati.

In xcode 6.3.2 ho dovuto:

Nel menu XCode -> Preferenze -> scheda Posizioni -> In Posizioni cambia i dati derivati ​​in Relativi e poi torna a Predefinito

Quindi il pennino si è caricato bene.


Ho appena eliminato la cartella Dati derivati ​​e ha funzionato. Sembra confondersi perché avevo rinominato il file xib nella navigazione del progetto. Diverso.
Kyle Goslan,

2

Il tuo file XIB è probabilmente fuori dalla cartella del tuo progetto. Questo porta a non mostrare Target Inspector. Tuttavia, spostare il file XIB nella cartella del progetto dovrebbe risolverlo.


2

Attenzione: Xcode fa distinzione tra maiuscole e minuscole con i nomi dei file. Non è lo stesso "Fun" che "fun".


Il nome del file per il mio pennino era FormItemCheckBoxCell.nib, la classe era FormItemCheckboxCell. Mettere in maiuscolo "Box" nel nome è costato 45 minuti della mia vita.
SafeFastExpressive

1

Se stai utilizzando framework nel tuo progetto, devi assicurarti di caricare dal bundle corretto:

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

1

per me, si è risolto semplicemente cambiando il nome del file della mia cella nello stesso della sua classe.

In Attributes Inspector (Terza scheda sulla barra laterale destra nello storyboard):

  1. Imposta l'identificatore della cella (ad esempio: "MyCellId"),
  2. Imposta la classe della cella (ad esempio: "MyCellClass" quando il file è "MyCellClass"),
  3. Registra la cella nel tuo controller di visualizzazione come segue:

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


0

Ho riscontrato questo problema durante la trasformazione del mio vecchio codice da XCode 3x a XCode 4 e l'ho risolto semplicemente rinominando wwwwwwww.xib in RootViewController.xib


0

Mi sono imbattuto nello stesso problema. Nel mio caso il nome del pennino era "MyViewController.xib" e l'ho rinominato in "MyView.xib". Questo ha eliminato l'errore.

Stavo anche spostando un progetto da XCode 3 a 4.2. La modifica del tipo di percorso non aveva importanza.


0

Inoltre, il motivo può essere che il file viene cercato nella cartella specifica della lingua sbagliata quando hai modificato le localizzazioni.


0

Ogni volta che eseguo il refactoring del nome di un controller di visualizzazione presente nella mia appDelegate perdo tempo su questo. Il refactoring non cambia il nome del pennino in initWithNibName: @ "MYOldViewControllerName".


0

Ho avuto lo stesso problema, rinominare l'identificatore del controller della vista nello storyboard ha funzionato per me.


0

Ho notato che può succedere se passi da un ramo all'altro in git e dimentichi di fare un clean. Quindi xib è lì e tutto viene trovato, ma la build esatta potrebbe avere problemi. Quindi, per ogni evenienza, non dimenticare di fare una pulizia


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

Nel codice sopra, se dai anche un'estensione di file come "SecondView.xib", allora è sbagliato e ti darà l'errore precedente. Utilizza invece "SecondView". Ho fatto quell'errore.


0

Questo ha funzionato per me .. Assicurati di aver digitato correttamente il nome del pennino.

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

Graphview (nome del pennino)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.