NIB konnte nicht im Bundle geladen werden

111

Ich versuche, Janrain Engage als benutzerdefiniertes Modul in Appcelerator Titanium zu integrieren. Ich habe ein Beispielmodul erstellt und den Ordner JREngage auf das Beispielmodul xcodeproj gezogen, wie in der Dokumentation von Jainrain angegeben.

Jetzt gebe ich diesem Projekt den Befehl build, führe ./build.pydann den titanium runBefehl aus und führe schließlich den Befehl aus. Es startet die Anwendung im Simulator mit einem leeren Bildschirm und stürzt sofort ab, wobei der folgende Fehler ausgelöst wird.

Beenden der App aufgrund der nicht erfassten Ausnahme 'NSInternalInconsistencyException', Grund: 'NIB konnte nicht im Bundle geladen werden:' NSBundle </ Users / abhilash / Bibliothek / Anwendungsunterstützung / iPhone Simulator / 4.2 / Applications / CA167346-4091-4E16-B841-955D1D391713 / test.app> (geladen) 'mit dem Namen' JRProvidersController ''

Warum kann dieser Fehler auftreten?

Goje87
quelle

Antworten:

212

Besuchen Sie die Eigenschaften der .xib-Dateien im Dateiinspektor , die Eigenschaft "Zielmitgliedschaft" im Auswahlfeld, dann wurde Ihre xib-Datei mit Ihrem Ziel verknüpft

sieben Pfund
quelle
2
Wenn Sie alloc init anstelle von initWithNibName: bunle: verwenden, erhalten Sie außerdem einen schwarzen Bildschirm.
Robert Childan
Ich frage mich, warum eine absolut unbenutzte .xib-Datei in einem Projektdateiordner hängen muss
Ben
Ich glaube, ich habe dieses Kontrollkästchen versehentlich deaktiviert, anstatt es automatisch auszurichten. Der Absturz für mich wurde
behoben
Alle Kontrollkästchen für die Zielmitgliedschaft sind für mich ausgegraut. Was könnte der Grund sein?
Stas
64

Im Targets -> Build Phases

Stellen Sie sicher, dass die .xib hinzugefügt Copy Bundle Resourceswird. Wenn sie nicht vorhanden ist, fügen Sie die .xib-Datei hinzu.

Kunalg
quelle
Hat für mich gearbeitet. Dies geschieht normalerweise, wenn Sie eine xib-Datei kopieren / duplizieren. +1
VoidMain
22

versuche alles herauszufinden

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

Stellen Sie in Ihrem Code sicher, dass XXXControllerdie Schreibweise korrekt ist

chings228
quelle
Es ist einfach, da der Nibname nicht autotypisiert ist
chings228
1
Er meinte den Klassennamen kurz vor der Zuweisung, die autotypisiert ist: P
Gil Sand
uiview könnte von der Feder geladen werden, hat aber keine initWithNibName:bundle:Methode
Vyachaslav Gerchicov
wir sprechen über viewcontroller
chings228
@ chings228 XXXControlloer und XXXController, sehen Sie den Unterschied
Zaporozhchenko Oleksandr
15

Ich hatte das gleiche Problem (Ausnahme 'NIB konnte nicht im Bundle geladen werden: ..'), nachdem ich meinen xcode von 3.2 auf 4.02 aktualisiert hatte. Während die Bereitstellung meiner App mit Xcode 3.2 einwandfrei funktioniert hat, stürzt Xcode 4 ab und löst die oben genannte Ausnahme aus - allerdings nur, wenn ich versucht habe, sie auf dem IOS Simulator (v.4.2) bereitzustellen. Das Targeting des IOS-Geräts (v.4.1) erfolgte auch mit Xcode 4.

Es stellte sich heraus (nach stundenlangem verzweifeltem Herumkrabbeln), dass der Grund eine fast "versteckte" Einstellung in der .xib-Datei war:

Besuchen Sie die Eigenschaften der .xib-Dateien im Dateiinspektor: Die Eigenschaft 'Speicherort' wurde für alle .xib-Dateien auf 'Relativ zur Gruppe' festgelegt. Ich habe es in 'Relativ zum Projekt' und voila geändert: Alle .xib-Dateien werden jetzt korrekt in den IOS-Simulator geladen!

Ich habe keine Ahnung, was der Grund für dieses seltsame Xcode4-Verhalten ist, aber vielleicht lohnt es sich, einen Versuch zu unternehmen?

Schöpfer_11
quelle
Dies löste einen Absturz, mit dem ich beim Kompilieren eines sehr veralteten Quartz Composer-Plugins zu tun hatte.
Peter Kazazes
12

In meinem Fall war es sehr seltsam (verwenden Sie ein Storyboard): Aus irgendeinem Grund wurde es in der Liste von "Basisname der Haupt-Storyboard-Datei" in "Basisname der Hauptfeder-Datei" geändert.

Das Problem wurde durch Zurücksetzen auf "Name der Basis-Storyboard-Hauptdatei" (UIMainStoryboardFile) behoben

Tibidabo
quelle
1
Gut. Hatte das gleiche Problem. Vielen Dank. Dies löste es.
Rameez Hussain
1
Das hat mein Problem gelöst! Danke dir. Ich hatte gerade mein Projekt dupliziert und alle relevanten Dateien umbenannt. Alles hat funktioniert, aber das hier. Jetzt funktioniert alles !!
BeccaP
11

Der Fehler bedeutet, dass keine .xib-Datei mit "JRProvidersController"Namen vorhanden ist. Überprüfen Sie erneut, ob JRProvidersController.xibvorhanden.

Sie laden .xib filemit

controller = [[JRProvidersController alloc] initWithNibName:@"JRProvidersController" bundle:nil];
Hanuman
quelle
1
Hey Hanuman, ich habe überprüft, ob die Datei JRProvidersController.xib existiert. Ich habe auch versucht, die Datei umzubenennen und auszuführen, auch wenn sie dieselbe Ausnahme auslöst.
Goje87
Versuchen Sie, den Aufruf in initWithNibName: NSStringFromClass ([MyViewController-Klasse]) zu ändern. Überprüfen Sie auch genau, ob der Dateiname zwischen Groß- und Kleinschreibung unterscheidet
Hanuman,
Ich habe die von Ihnen vorgeschlagenen Änderungen vorgenommen, aber keinen Erfolg.
Goje87
7

Mit einer benutzerdefinierten Swift-Ansicht in einem Objective-C-Ansichtscontroller (ja, auch nach dem Importieren der <<PROJECT NAME>>-Swift.hDatei) habe ich versucht, die Schreibfeder mit folgenden Funktionen zu laden:

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

... NSStringFromClass([MyCustomView class])kehrt aber zurück <<PROJECT NAME>>.MyCustomViewund das Laden schlägt fehl. TL; DR Alle funktionierten gut beim Laden der Feder mit einem String-Literal:

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

Da das Build-Ziel eines meiner iOS-Geräte ist, habe ich mit der rechten Maustaste auf die Produktdatei (xyzw.app) geklickt und das Popup-Element Im Finder anzeigen ausgewählt. Es öffnete ein Fenster mit der xyzw.app darin; Ich öffnete das Bundle mit Show Package Contents und sah alle Dateien, die ich erwartet hatte, mit Ausnahme einer Datei, über die ich mich beschwerte, mit einem Großbuchstaben I anstelle eines Kleinbuchstaben i im Namen (zoomieVIew.nib anstelle von zoomieView.nib) ). Ich hatte den Großbuchstaben I im Dateinamen der xib bemerkt und ihn geändert und neu erstellt. Anscheinend hat Xcode den generierten .nib-Namen so belassen, wie er war. Ich habe zoomieVIew.nib im Bundle gelöscht, neu erstellt und Xcode hat die Datei ordnungsgemäß als zoomieView.nib neu erstellt. Die App begann auf dem Gerät zu arbeiten.

Michael Brian Bentley
quelle
das gleiche hier wie michael beschreibt. Ich hatte eine XIB-Datei mit einer benutzerdefinierten UITableViewCell erstellt. Wenn ich die .app öffne und nach myCell.xib suche, sehe ich, dass es tatsächlich myCell.nib ist. Darüber hinaus stürzte die App nur auf dem Gerät ab und lud die xib-Datei in Ordnung, wenn sie auf dem Simulator ausgeführt wurde. Es war etwas schwierig, es zurückzusetzen. für mich zumindest. Erst als ich die Datei löschte, das Ziel bereinigte und die Datei zurückkopierte - funktionierte es.
Nir Pengas
markiert, da es auch eine einfache Möglichkeit zeigt, den Paketinhalt zu finden und anzuzeigen
fotisgpap
doh. Wie könnte ich mich wieder dazu bringen? danke freundlicher Mann :) Ich war ganz am Anfang der Erforschung dieses Problems
heximal
6

Ich hatte dieses Problem mit einem Storyboard und die Feder hieß so etwas wie "bKD-J3-fhr-view-ZSR-8m-2da".

Dies lag daran, dass ich versucht habe, self.view im init (withCoder) eines View Controllers eine Unteransicht hinzuzufügen. Self.view existiert noch nicht.

Verschoben nach viewDidLoad und alles besser!

Will Larche
quelle
5

Schauen Sie sich das Projekt an

Target -> Buid Phases -> Copy Bundle Resources

Sie finden Ihr xib / storyborad mit roter Farbe.

Entfernen Sie es einfach. Entfernen Sie auch alle Verweise auf fehlende Dateien aus dem Projekt.

Ziehen Sie nun diese Storyboard / XIB-Datei erneut darauf Copy Bundle Resources Es wird weiterhin eine Datei mit roter Farbe aber machen Sie sich darüber keine Sorgen.

Einfach reinigen und Projekt bauen.

Jetzt wird Ihr Projekt wieder erfolgreich ausgeführt !!

iChirag
quelle
1
Dies löste mein Problem, da ich zwei Storyboards "MyStoryboard.storyboard" und "MyStoryboard ~ ipad.storyboad" bekam ... also entfernte ich vom iPad-Ziel "MyStoryboard.storyboard" aus den "Copy Bundle Resources"
i89
5

Für Storyboard

Ich habe jede einzelne hier veröffentlichte Lösung ausprobiert, aber nichts hat bei mir funktioniert, da ich Storyboard mit Swift 5 verwende.

Ich habe gerade angefangen, neue Controller und Ansichten in der Storyboard-Test-App zu erstellen. Ich habe festgestellt, dass mir die Storyboard-ID von My View Controller fehlt.

Hier ist meine Lösung: Wenn Sie von ViewController A -> View Controller B wechseln möchten

Schritt 1. Im Storyboard: Stellen Sie einfach sicher, dass Ihr ViewControllerA in Navigation Controller eingebettet ist

Schritt 2. Im Storyboard: Überprüfen Sie nun, ob Sie die Storyboard-ID für Ihren ViewControllerB erwähnt haben, die Sie im Code als Kennung verwenden.

Geben Sie hier die Bildbeschreibung ein

Schritt 3. und stellen Sie schließlich sicher, dass Sie den Controller in Ihrem ViewControllerA mit einem Klick auf die Schaltfläche auf diese Weise drücken.

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

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

Geben Sie .xib nicht ein, wenn Sie den XIB-Namen eingeben! ES IST BEREITS STILLSCHWEIGEND!

Tu das nicht:

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

Mach das:

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

Swift4-Beispiel, wenn sich MyCustomView.swift und MyCustomView.xib in einem Framework befinden. Fügen Sie dies in die Initiale von MyCustomView ein:

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
quelle
Schließlich! Ich arbeite in einem modularen Projekt von iOS und das ist, was ich suche. Danke dir!
Firda Sahidi
Was ist aViewInMyCustomView?
Famfamfam
3

Ich habe auch festgestellt, dass es fehlgeschlagen ist, als ich versucht habe, die XIB mit einem Namen wie @ "MyFile.xib" zu laden. Wenn ich gerade @ "MyFile" verwendet habe, hat es funktioniert - anscheinend wird immer die Erweiterung hinzugefügt. In der Fehlermeldung wurde jedoch nur angegeben, dass MyFIle.xib im Bundle nicht gefunden werden konnte. Wenn MyFile.xib.xib angegeben worden wäre, wäre dies ein großer Hinweis gewesen.

Jonathan Starr
quelle
Der Grund, warum Sie die Erweiterung nicht hinzufügen dürfen, ist, dass in Ihrem kompilierten Bundle .xib-Dateien auch in .nib-Dateien kompiliert werden. Es gab also tatsächlich keine MyFile.xib in Ihrem Bundle, ungeachtet der doppelten Erweiterung.
Pieter Jongsma
2

Bei der Arbeit an Xcode 4.6.3 und der Lokalisierung meiner NIB-Dateien tritt dieses Problem ebenfalls auf.

Für mich hat nichts anderes geholfen, als "Document Versioning" im File Inspector auf Deployment 5.0 anstelle von 6.1 zu ändern.

krafter
quelle
2

Dies geschieht, wenn Sie die NIB-Datei umbenennen. Wenn Sie dies bereits getan haben, erstellen Sie eine neue Schreibfeder (dh kopieren Sie den Inhalt der aktuellen Schreibfeder-Datei in eine neue Schreibfeder), löschen Sie die alte Schreibfeder-Datei und das Problem wird behoben.

Bearbeiten: Mit dem neuen Xcode ab Version 4.6.3 wird die Controller-Klasse umbenannt, wenn Sie die Controller-Klasse umbenennen (mit Refactor-Funktion), und Sie müssen sich keine Gedanken über das Problem beim Laden der Feder machen.

NetDeveloper
quelle
2

Ich hatte gerade eine interessante Erfahrung mit Xcode 6.3.

Ich habe diesen Fehler auch immer wieder erhalten, obwohl ich alles versucht habe, was man normalerweise mit Rechtschreibung, Zielmitgliedschaft usw. denkt, wie oben vorgeschlagen. Ich habe auch mehrmals versucht, abgeleitete Daten zu bereinigen, zu löschen und die App aus dem Simulator zu löschen, um sicherzustellen, dass das Bundle korrekt erstellt wurde, aber ohne Erfolg.

Nach der Antwort von Brian Michael Bentley habe ich mich schließlich entschlossen, meine .app-Datei im Ordner meines Simulators auf meiner Festplatte zu überprüfen. Ich fand heraus, dass alle meine Schreibfedern vorhanden waren, jedoch mit einer abc ~ ipad.nib anstelle der erwarteten abc.nib. Ich habe alle diese Dateien manuell umbenannt, um den ~ ipad-Teil zu entfernen, der erstellt wurde und funktioniert hat!

Beim Versuch zu sehen, warum diese mit dem Schlüsselwort ~ ipad angehängt wurden, habe ich mir meine Projekteinstellungen angesehen und auf der Registerkarte Allgemein> Bereitstellungsinformationen nur das iPad ausgewählt. Ich habe versucht, auf einem iPhone-Simulator zu laufen. Ich glaube, dass Xcode in der Vergangenheit einen Fehler ausgegeben hat, der darauf hinweist, dass die Binärdatei das iPhone nicht unterstützt und Sie die App nicht erfolgreich ausführen können.

Ich habe die App aus dem Simulator gelöscht und das Gleiche noch einmal gemacht - wieder nur mit unterstütztem iPad. Dieses Mal enthielt die .app für jedes erwartete Storyboard abc ~ iphone.nib UND abc ~ ipad.nib und lief problemlos auf dem iPhone-Simulator. Nochmals - Wenn wir das iPad nur in unseren Einstellungen für Bereitstellungsinformationen auswählen, sollte es nicht auf dem iPhone Simulator ausgeführt werden. Dies ist ein Xcode-Fehler.

Es gibt hier also ein inkonsistentes Verhalten von Xcode und leider handelt es sich um einen zeitweiligen Fehler, der möglicherweise schwer zu reproduzieren ist, aber ich habe ihn hier eingefügt, damit er anderen in Zukunft helfen kann.

Justin-Nicholas Y. Toyama
quelle
2

Hatte das gleiche Problem nichts funktioniert, so fand ich etwas Seltsames mit abgeleiteten Daten.

In xcode 6.3.2 musste ich:

Ändern Sie im XCode-Menü -> Einstellungen -> Registerkarte "Standorte" -> In Standorten abgeleitete Daten in "Relativ" und wechseln Sie dann zurück zu "Standard"

Dann wurde die Feder gut geladen.

Kevin
quelle
Ich habe gerade den Ordner "Abgeleitete Daten" gelöscht und es hat funktioniert. Scheint verwirrt zu sein, weil ich die xib-Datei in der Projektnavigation umbenannt hatte. Sonderling.
Kyle Goslan
2

Ihre XIB-Datei befindet sich wahrscheinlich außerhalb Ihres Projektordners. Dies führt dazu, dass der Zielinspektor nicht angezeigt wird. Durch Verschieben der XIB-Datei in Ihren Projektordner sollte dies jedoch behoben werden.

hhamm
quelle
2

Seien Sie vorsichtig: Xcode unterscheidet bei Dateinamen zwischen Groß- und Kleinschreibung. Es ist nicht das gleiche "Spaß" als "Spaß".

oskarko
quelle
Der Dateiname für meine Feder war FormItemCheckBoxCell.nib, die Klasse war FormItemCheckboxCell. Die Großschreibung von "Box" im Namen kostete 45 Minuten meines Lebens.
SafeFastExpressive
1

Wenn Sie in Ihrem Projekt Frameworks verwenden, müssen Sie sicherstellen, dass Sie aus dem richtigen Bundle laden:

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

Für mich wurde es gelöst, indem der Name der Datei meiner Zelle in den Namen der Klasse geändert wurde.

Im Attributinspektor (dritte Registerkarte in der rechten Leiste im Storyboard):

  1. Legen Sie die Kennung der Zelle fest (zum Beispiel: "MyCellId").
  2. Legen Sie die Klasse der Zelle fest (z. B. "MyCellClass", wenn die Datei "MyCellClass" lautet).
  3. Registrieren Sie die Zelle in Ihrem View Controller wie folgt:

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

Marjan Basiri
quelle
0

Ich habe dieses Problem beim Transformieren meines alten Codes von XCode 3x in XCode 4 erhalten und es gelöst, indem ich einfach wwwwwww.xib in RootViewController.xib umbenannt habe

Nikolay Frick
quelle
0

Ich bin auf das gleiche Problem gestoßen. In meinem Fall war der Name der Schreibfeder "MyViewController.xib" und ich habe ihn in "MyView.xib" umbenannt. Dies hat den Fehler beseitigt.

Ich habe auch ein Projekt von XCode 3 auf 4.2 verschoben. Das Ändern des Pfadtyps spielte keine Rolle.

Schiffskopf
quelle
0

Der Grund kann auch sein, dass die Datei im falschen sprachspezifischen Ordner nachgeschlagen wird, wenn Sie mit Lokalisierungen herumgespielt haben.

MacMark
quelle
0

Jedes Mal, wenn ich den Namen eines View Controllers in meinem appDelegate umgestalte, verschwende ich Zeit damit. Durch Refactoring wird der Name der Schreibfeder in initWithNibName: @ "MYOldViewControllerName" nicht geändert.

Cloudsfinfin
quelle
0

Ich hatte das gleiche Problem: Das Umbenennen meiner View Controller-ID im Storyboard hat bei mir funktioniert.

Dave
quelle
0

Mir ist aufgefallen, dass es passieren kann, wenn Sie zwischen Zweigen in Git wechseln und vergessen, eine Reinigung vorzunehmen. Xib ist also da und alles ist gefunden, aber der genaue Build kann Probleme haben. Also nur für den Fall nicht vergessen, sauber zu machen

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

Wenn Sie im obigen Code auch eine Dateierweiterung wie "SecondView.xib" angeben, ist dies falsch und führt zu dem oben genannten Fehler. Verwenden Sie stattdessen "SecondView". Ich habe diesen Fehler gemacht.

NSPratik
quelle
0

Dies funktioniert für mich. Stellen Sie sicher, dass Sie den Namen der Schreibfeder richtig eingegeben haben.

[[NSBundle mainBundle] loadNibNamed: @ "Graphview" -Eigentümer: self options: nil];

Graphview (Name der Feder)

Narasimha Nallamsetty
quelle