web-dev-qa-db-ja.com

NIBをバンドルに読み込めませんでした

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/「JRProvidersController」という名前のtest.app>(loaded)」

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

95
Goje87

ファイルインスペクターの.xibファイルのプロパティにアクセスします。選択ボックスの[ターゲットメンバーシップ]ピッチプロパティを使用して、xibファイルをターゲットにリンクしました

195
sevenpounds

Targets -> Build Phases

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

49
kunalg

すべてを見つけよう

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

コード内で、XXXControllerのスペルが正しいことを確認してください

22
chings228

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」に設定されています。 「プロジェクトへの相対」に変更して、出来上がり:すべての.xibファイルがIOSシミュレーターに正しくロードされるようになりました!

この奇妙なXcode4の動作の背後にある理由は何なのか分かりませんが、試してみる価値があるのでしょうか?

15
creator_11

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

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

12
Tibidabo

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

.xib fileをロードします

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

ストーリーボードでこの問題が発生し、ペン先は「bKD-J3-fhr-view-ZSR-8m-2da」などと呼ばれていました。

これは、View Controllerのinit(withCoder)でself.viewにサブビューを追加しようとしたためです。 Self.viewはまだ存在しません。

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

6
Will Larche

IOSデバイスの1つであるビルドターゲットを使用して、製品ファイル(xyzw.app)を右クリックし、Show in Finderポップアップ項目を選択しました。内部にxyzw.appを含むウィンドウを開きました。 Show Package Contentsを使用してバンドルを開き、名前に小文字のiの代わりに大文字のI(zoomieView.nibの代わりにzoomieVIew.nib)が含まれる1つのファイルを除いて、予期したすべてのファイルを見ました)。 xibのファイル名に大文字のIがあることに気付き、それを変更して再構築しました。明らかに、Xcodeは生成された.nib名をそのままにしておきました。バンドル内のzoomieVIew.nibを削除して再構築し、XcodeがファイルをzoomieView.nibとして正しく再作成しました。アプリはデバイスで動作し始めました。

Objective-C View Controllerでカスタム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すべては、文字列リテラルを使用してペン先をロードすることでうまく機能しました。

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

プロジェクトをご覧ください

Target -> Buid Phases -> Copy Bundle Resources

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

削除するだけでなく、プロジェクトから欠落しているファイルのすべての参照を削除します。

このstoryboard/xibファイルを再びこのCopy Bundle Resourcesにドラッグします。ファイルは引き続き赤色で表示されますが、心配する必要はありません。

ただきれいにしてプロジェクトをビルドします。

これで、プロジェクトが再び正常に実行されるようになります!!

4
iChirag

MyCustomView.SwiftおよびMyCustomView.xibがフレームワークにある場合のSwift4の例。これを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
} 
2
norbDEV

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

2
Jonathan Starr

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

これをしないでください:

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

これを行う:

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

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

2
hhamm

Xcode 6.3を使用して面白い経験をしたばかりです。

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

最後に、Brian Michael Bentleyの回答に続いて、私はついにHDのシミュレーターのフォルダーにある.appファイルを調べることにしました。私はすべてのペン先がそこにあることを発見しましたが、予想されるabc.nibの代わりにabc〜ipad.nibを使用しました。 〜ipad部分を削除するためにこれらのファイルすべてを手動で名前を変更し、ビルドして機能しました!

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

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

そのため、Xcodeの一部には一貫性のない動作がいくつかあり、残念ながら断続的なバグであり、これを再現するのは難しいかもしれませんが、将来的に他の人に役立つようにここに配置します。

これと同じ問題が何も機能しなかったので、派生データに何かおかしなことがあると考えました。

Xcode 6.3.2では、以下を行う必要がありました。

XCodeメニューで->設定->場所タブ->場所で派生データを相対に変更してから、デフォルトに切り替えます

その後、ペン先は正常にロードされました。

2
Kevin

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

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

2
NetDeveloper

ストーリーボードの場合

ここに投稿されたすべてのソリューションを試してみましたが、StoryboardをSwift 5で使用しているので、何もうまくいきませんでした。

ストーリーボードテストアプリで新しいコントローラーとビューの構築を始めたばかりですが、見つけたのは、View ControllerのストーリーボードIDが欠落していたことです。

だからここに私の解決策があります、ViewController Aから移動したい場合-> View Controller B

ステップ1。ストーリーボード内:ViewControllerAがNavigation Controllerに埋め込まれていることを確認してください

ステップ2。ストーリーボード内:ここで、ViewControllerBのストーリーボードIDについて言及しましたかコードで識別子として使用します。

enter image description here

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

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

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

Xcode 4.6.3で作業し、NIBファイルをローカライズすると、この問題も発生します。

私にとっては、File Inspectorの「Document Versioning」を6.1ではなくDeployment 5.0に変更する以外に何も助けませんでした。

2
krafter

注意:Xcodeはファイル名の大文字小文字を区別します。 「楽しい」と同じ「楽しい」ではありません。

1
oskarko

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

NSBundle *bundle = [NSBundle bundleWithIdentifier:@"<your bundle id here>"];
ABCViewController *vc = [[ABCViewController alloc] initWithNibName:@"<your nib name>" bundle:bundle];
1
david72
SecondViewController *secondViewController = [[SecondViewController alloc]initWithNibName:@"SecondView.xib" bundle:nil];
    [self.navigationController pushViewController:secondViewController animated:YES];

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

0
NSPratik

Gitでブランチを切り替えて、クリーンにするのを忘れると、それが起こるかもしれないことに気付きました。したがって、xibが存在し、すべてが見つかっていますが、正確なビルドには問題がある可能性があります。念のためきれいにすることを忘れないでください

0
Ezeki

これは私のために働いています..ペン先名を正しく入力したことを確認してください。

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

Graphview(ペン先名)

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

0
Nikolay Frick

私も同じ問題を抱えていました。ストーリーボードでView Controller識別子の名前を変更するとうまくいきました。

0
Dave

私は同じ問題に遭遇しました。私の場合、ペン先名は「MyV​​iewController.xib」であり、「MyView.xib」に名前を変更しました。これはエラーを取り除きました。

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

0
vesselhead

また、ローカライズを台無しにしたときに、ファイルが間違った言語固有のフォルダーで検索される可能性もあります。

0
MacMark

AppDelegateにあるView Controllerの名前をリファクタリングするたびに、これに時間を無駄にします。リファクタリングでは、initWithNibName:@ "MYOldViewControllerName"のnib名は変更されません。

0
cloudsurfin

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

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

  1. セルの識別子を設定します(例: "MyCellId")、
  2. セルのクラスを設定します(たとえば、ファイルが「MyCellClass」の場合は「MyCellClass」)、
  3. 次のようにView Controllerにセルを登録します。

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

0
Marjan Basiri

同じ問題が発生し、.xibファイルは既にTarget Membershipでプロジェクトにリンクされています。次に、ファイルのターゲットチェックボックスをオフにして再度チェックし、CleanおよびBuildプロジェクトを選択しました。興味深いことに、それは私のために働いています。

0
elia