バンドルでNIBをロードできませんでした


111

Janrain EngageをカスタムモジュールとしてAppcelerator Titaniumと統合しようとしています。Jainrainのドキュメントに示されているように、サンプルモジュールを作成し、JREngageフォルダーをサンプルモジュールxcodeprojにドラッグしました。

次に、このプロジェクトにビルドコマンドを指定して実行し./build.py、最後にtitanium runコマンドを実行します。空白の画面でアプリケーションをシミュレーターで起動し、すぐにクラッシュして次のエラーをスローします。

キャッチされない例外 'NSInternalInconsistencyException'によりアプリを終了します、理由: 'バンドルでNIBをロードできませんでした:' NSBundle </ Users / abhilash / Library / Application Support / iPhone Simulator / 4.2 / Applications / CA167346-4091-4E16-B841-955D1D391713 / test.app>(loaded)」、名前は「JRProvidersController」

このエラーが発生するのはなぜですか?

回答:


213

ファイルインスペクターで.xibファイルのプロパティにアクセスします。選択ボックスのプロパティ「ターゲットメンバーシップ」のピッチに移動すると、xibファイルがターゲットにリンクされました


2
さらに、initWithNibName:bunle:の代わりにalloc initを使用している場合、黒い画面が表示されます。
Robert Childan

絶対に使用されていない.xibファイルプロジェクトファイルフォルダーにハングアップする必要がある理由を知りたい…
Ben

自動レイアウトではなく、このチェックボックスを誤ってオフにしたと思います。クラッシュを修正しました。ありがとう
Yunus Nedim Mehel 2013年

すべてのターゲットメンバーシップのチェックボックスがグレー表示されています...何が原因ですか?
Stas

64

Targets -> Build Phases

.xibがに追加されていることを確認し、Copy Bundle Resources存在しない場合は.xibファイルを追加します。


私のために働いた。これは通常、xibファイルをコピー/複製するときに発生します。+1
VoidMain

22

すべてを見つけようとする

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

あなたのコードで、そしてそれXXXControllerが正しいつづりであることを確認してください


nibnameは自動入力されないため、簡単です
chings228

1
彼はallocの直前のクラス名を意味しました。これは自動入力されます:P
Gil Sand

uiviewはnibからロードできますが、initWithNibName:bundle:メソッドはありません
Vyachaslav Gerchicov

ビューコントローラーについて話している
chings228

@ chings228 XXXControlloerとXXXController、違いを確認してください
Zaporozhchenko Oleksandr

15

xcodeを3.2から4.02にアップグレードした後、同じ問題(「バンドルでNIBをロードできませんでした:..」を除く)が発生しました。Xcode 3.2でアプリをデプロイすると問題なく動作しましたが、xcode 4でクラッシュし、上記の例外が発生しました。ただし、IOS Simulator(v.4.2)にデプロイしようとした場合のみです。IOSデバイス(v.4.1)をターゲットにすると、Xcode 4でも動作しました。

(必死に何時間もスクラブした後)理由は.xibファイルのほとんど「隠された」設定であることがわかりました。

ファイルインスペクターで.xibファイルのプロパティにアクセスします。すべての.xibファイルで、プロパティ 'Location'が 'Relative to Group'に設定されました。私はそれを 'Relative to project'とvoilaに変更しました:すべての.xibファイルがIOSシミュレーターに正しくロードされます

この奇妙なXcode4の動作の理由は何なのかわかりませんが、試してみる価値はありますか?


これにより、非常に古いQuartz Composerプラグインをコンパイルするときに処理していたクラッシュが解決されました。
Peter Kazazes、2015年

12

私の場合は非常に奇妙でした(ストーリーボードを使用):何らかの理由で、plistで「メインストーリーボードファイルのベース名」から「メインnibファイルのベース名」に変更されました。

「メインストーリーボードファイルのベース名」(UIMainStoryboardFile)に戻すと、問題は解決しました


1
いいね。同じ問題がありました。ありがとう。これで解決しました。
Rameez Hussain 2014

1
これは私の問題を解決しました!ありがとうございました。プロジェクトを複製し、関連するすべてのファイルの名前を変更しました。これはすべてうまくいきました。今、すべてが動作します!!
BeccaP 2014

11

エラーは、"JRProvidersController"名前の.xibファイルがないことを意味します。JRProvidersController.xib存在するかどうかを再確認してください。

あなたがロードさ.xib fileれます

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

1
ハヌマンさん、JRProvidersController.xibファイルが存在することを確認しました。また、ファイルの名前を変更して実行しようとしましたが、それでも同じ例外がスローされます。
Goje87 2011年

呼び出しをinitWithNibName:NSStringFromClass([MyViewController class])に変更してみてください。それは大文字と小文字が区別されても、ファイル名のために密接に確認してください
ハヌマーン


私はあなたが提案した変更を加えましたが、成功しませんでした。
Goje87 2011年

7

Objective-CビューコントローラーでカスタムSwiftビューを使用して(はい、<<PROJECT NAME>>-Swift.hファイルをインポートした後でも)、次の方法でnibをロードしようとしました。

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

... NSStringFromClass([MyCustomView class])戻りますが<<PROJECT NAME>>.MyCustomView、ロードは失敗します。TL; DRすべては、文字列リテラルを使用してnibをうまくロードしました:

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

6

iOSデバイスの1つであるビルドターゲットを使用して、製品ファイル(xyzw.app)を右クリックし、[Finderに表示]ポップアップアイテムを選択しました。内部にxyzw.appがあるウィンドウを開きました。[パッケージの内容を表示]を使用してバンドルを開き、名前が小文字のiの代わりに大文字のI(zoomieView.nibの代わりにzoomm )。xibのファイル名に大文字のIがあることに気づき、それを変更して再構築しました。どうやらXcodeは生成された.nib名をそのままにしていた バンドル内のzoomieVIew.nibを削除して再構築し、XcodeはファイルをzoomieView.nibとして正しく再作成しました。アプリはデバイスで動作し始めました。


ここでマイケルが説明しているのと同じこと。カスタムUITableViewCellを保持するxibファイルを作成しました。.appを開いてmyCell.xibを検索すると、実際にはmyCell.nibであることがわかります。さらに、アプリはデバイスでのみクラッシュし、シミュレーターで実行したときにxibファイルを正常にロードしていました。リセットするのは少しトリッキーでした。少なくとも私にとっては。私がファイルを削除し、ターゲットをクリーンアップしてファイルをコピーしたときにのみ、それは機能しましたか。
Nir Pengas 2012

パッケージの内容を見つけて表示する簡単な方法も示されているので、マークアップしました
fotisgpap '17年

どー。どうすれば再びこれに慣れることができますか。親切な人に感謝:)私はこの問題の研究を始めた
ばかりでした

6

ストーリーボードでこの問題があり、ペン先は「bKD-J3-fhr-view-ZSR-8m-2da」のような名前でした。

それは、ビューコントローラーのinit(withCoder)でself.viewにサブビューを追加しようとしたためです。Self.viewはまだ存在していません。

それをviewDidLoadに移動しました。


5

プロジェクトを見てください

Target -> Buid Phases -> Copy Bundle Resources

赤い色のxib / storyboradが見つかります。

それを削除するだけです。また、不足しているファイルのすべての参照をプロジェクトから削除します。

このストーリーボード/ xibファイルをこれにもう一度ドラッグします Copy Bundle Resources。赤い色のファイルが表示されますが、心配する必要はありません。

プロジェクトをクリーンアップしてビルドするだけです。

これでプロジェクトが再び正常に実行されます!!


1
これで問題が解決しました。ストーリーボード「MyStoryboard.storyboard」と「MyStoryboard〜ipad.storyboad」の2つが取得されたので、iPadのターゲットから「バンドルリソースのコピー」から「MyStoryboard.storyboard」を削除しました
i89

5

ストーリーボード用

ここに掲載されているすべての解決策を試しましたが、Swift 5でStoryboardを使用しているため、何もうまくいきませんでした。

ストーリーボードテストアプリで新しいコントローラーとビューを作成し始めたところ、ビューコントローラーのストーリーボードIDがありませんでした。

これが私の解決策です、ViewController A-> View Controller Bから移動する場合

ステップ1.ストーリーボード:ViewControllerAがナビゲーションコントローラに埋め込まれていることを確認します

ステップ2.ストーリーボードで:コードで識別子として使用するViewControllerBのストーリーボードIDについて言及したかどうかを確認します

ここに画像の説明を入力してください

ステップ3.そして最後に、ボタンクリックでViewControllerAでこのようにコントローラーをプッシュしていることを確認します。

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

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

4

XIB名に挿入するときに.xibを入れないでください!それはすでに暗示されています!

これを行わないでください:

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

これを行う:

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

4

あなたの場合Swift4例MyCustomView.swiftMyCustomView.xib枠組みインチ これをMyCustomViewのinitに配置します。

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
} 

最後に!私はiOSのモジュラープロジェクトで作業しており、これが私が探しているものです。ありがとうございました!
Firda Sahidi

aViewInMyCustomViewとは何ですか?
famfamfam

@famfamfam:UIView
norbDEV

tks、今、私は使い方を知っています
famfamfam

3

また、@ "MyFile.xib"のような名前でXIBをロードしようとすると失敗することもわかりました。@ "MyFile"を使用しただけではうまくいきました-明らかに拡張機能が常に追加されています。しかし、エラーメッセージは、バンドル内にMyFIle.xibが見つからなかったことを示しただけです。MyFile.xib.xibと言っていた場合、それは大きな手がかりとなるでしょう。


拡張子を追加してはならない理由は、コンパイルされたバンドルでは.xibファイルも.nibファイルにコンパイルされるためです。したがって、実際にはバンドルにMyFile.xibがありませんでした。二重の拡張を気にしないでください。
Pieter Jongsma 2013

2

Xcode 4.6.3での作業とNIBファイルのローカライズ私もこの問題に遭遇しました。

私にとって、ファイルインスペクターの「ドキュメントのバージョン管理」を6.1ではなくDeployment 5.0に変更する以外に何も助けになりませんでした。


2

nibファイルの名前を変更すると発生します。既にある場合は、新しいnibを作成し(現在のnibファイルの内容を新しいnibにコピーすることを意味します)、古いnibファイルを削除します。問題が解決します。

編集:バージョン4.6.3以降の新しいXcodeでは、コントローラークラスの名前を変更すると(リファクタリング機能を使用)、nibファイルの名前も変更されるため、nibの読み込みの問題を心配する必要はありません。


2

Xcode 6.3を使用して興味深い体験をしました。

上記で提案したように、スペル、ターゲットメンバーシップなどで通常考えられることをすべて試しましたが、このエラーも発生し続けました。また、バンドルの構築が正しく行われているのに失敗したことを確認するために、派生データのクリーニング、削除、シミュレーターからのアプリの削除を数回試みました。

最後に、ブライアンマイケルベントレーの回答に続いて、HDのシミュレーターのフォルダーにある.appファイルを検査することにしました。すべてのペン先があったが、予想されるabc.nibの代わりにabc〜ipad.nibが付いていることがわかりました。これらすべてのファイルの名前を手動で変更して、〜ipadパーツを削除し、ビルドして機能しました!

これらに〜ipadキーワードが追加された理由を確認するために、プロジェクト設定を確認しましたが、実際には、[全般]> [展開情報]タブでiPadのみを選択していました。iPhoneシミュレーターで実行しようとしました。過去には、XcodeはバイナリがiPhoneをサポートしておらず、アプリの実行に成功しないことを示すエラーを表示すると信じていました。

アプリをシミュレーターから削除し、同じことをもう一度行いました。iPadのみがサポートされています。今回、.appには予想されるストーリーボードごとにabc〜iphone.nibとabc〜ipad.nibが含まれており、iPhoneシミュレーターで問題なく実行されました。繰り返しになりますが、展開情報の設定でiPadのみを選択した場合、iPhoneシミュレータでは実行できません。これはXcodeのバグです。

したがって、Xcodeの一部に一貫性のない動作があり、残念ながらこれは断続的なバグであり、これは再現が難しい場合がありますが、将来的に他の人を助けるためにここに配置しました。


2

これと同じ問題が何も機能しなかったので、派生データで奇妙なものを見つけました。

xcode 6.3.2では、私はしなければなりませんでした:

XCodeメニュー->設定->ロケーションタブ->ロケーションで派生データを相対に変更し、デフォルトに切り替えます

その後、ペン先はうまくロードされました。


Derived Dataフォルダを削除したところ、うまくいきました。プロジェクトナビゲーションでxibファイルの名前を変更したため、混乱するようです。奇妙なもの。
カイルゴスラン

2

XIBファイルは、おそらくプロジェクトフォルダーの外にあります。これにより、ターゲットインスペクタが表示されなくなります。ただし、XIBファイルをプロジェクトフォルダーに移動すると修正されます。


2

注意:Xcodeは、ファイル名を含むcaseSensitiveです。「楽しい」と同じ「楽しい」ではありません。


私のnibのファイル名はFormItemCheckBoxCell.nib、クラスはFormItemCheckboxCellでした。名前で「ボックス」を大文字にすると、私の人生の45分かかります。
SafeFastExpressive

1

プロジェクトでフレームワークを使用している場合は、正しいバンドルからロードしていることを確認する必要があります。

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

1

私にとっては、セルのファイルの名前をクラスと同じに変更するだけで解決しました。

属性インスペクタ(ストーリーボードの右側のバーにある3番目のタブ):

  1. セルの識別子を設定します(例: "MyCellId")、
  2. セルのクラスを設定します(例:ファイルが「MyCellClass」の場合は「MyCellClass」)、
  3. 次のようにセルをビューコントローラに登録します。

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


0

古いコードをXCode 3xからXCode 4に変換しているときにこの問題が発生し、wwwwwwww.xibの名前をRootViewController.xibに変更するだけで解決しました


0

私は同じ問題に出くわしました。私の場合、nibの名前は「MyV​​iewController.xib」で、名前を「MyView.xib」に変更しました。これでエラーがなくなりました。

また、プロジェクトをXCode 3から4.2に移動しました。パスタイプの変更は重要ではありません。


0

また、ローカリゼーションをめちゃくちゃにしたときに、ファイルが誤った言語固有のフォルダーで検索される可能性もあります。


0

appDelegateにあるビューコントローラーの名前をリファクタリングするたびに、これに時間を費やしています。リファクタリングでは、initWithNibName:@ "MYOldViewControllerName"のnib名は変更されません。


0

同じ問題があり、ストーリーボードでビューコントローラ識別子の名前を変更するとうまくいきました。


0

gitでブランチを切り替えてクリーンを作成し忘れた場合に発生する可能性があることに気づきました。したがって、xibがあり、すべてが見つかりますが、正確なビルドに問題がある可能性があります。だから念のために、きれいにすることを忘れないでください


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

上記のコードで、「SecondView.xib」のようなファイル拡張子も指定した場合、それは間違っており、上記のエラーが表示されます。代わりに「SecondView」を使用してください。私はその間違いを犯しました。


0

これは私にとってはうまくいきました。ペン先の名前を正しく入力したことを確認してください。

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

Graphview(ペン先名)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.