web-dev-qa-db-ja.com

iPhoneデバイスでnibをバンドルでロードできませんでした

IPhoneで開発中のアプリをテストしようとしています。そのために、ターゲットをシミュレーターからXcodeのデバイスに変更しました。アプリケーションはデバイスに正しくアップロードされ、機能します。メインビューが表示されますが、セカンダリビューを開こうとすると、アプリケーションがクラッシュします。

IPhoneログ(コンソールを表示するためにiPhone構成ユーティリティをインストールしました[これはiPhoneからログを表示する唯一の方法ですか?])このエラーを確認できます。

Could not load NIB in bundle

しかし、シミュレータでは問題なく動作します。どうしましたか?何か案は?

25
Andrea Girardi

デバイスで大文字と小文字が区別されることがあり、シミュレータでは区別されないことがあります。

Xibのファイル名は何ですか?


または

シミュレーターからアプリをアンインストールして再度インストールしてみてください-シミュレーターには、アプリの前回の実行から古いファイルが残っている可能性があります-開発中にxibの名前を変更/移動しましたか?

22
deanWombourne

私は同じ問題を抱えていて、それを次のように修正しました:

  1. XCodeターゲットを開く
  2. 「ビルドフェーズ」タブをクリックします
  3. [バンドルリソースのコピー]セクションをクリックします
  4. +をクリックします
  5. 不足しているNibファイルを追加する
62
Iftach Orr

同様の問題があり、同じエラーが発生しました。 「NIB名」の下の属性パネルで、xibファイルの完全な名前を使用していたことがわかりました。

「SomeViewController.xib」を使用せず、「。xib」拡張子なしで「SomeViewController」を使用してください。

18
markquezada

_initWithNibName:@"MyViewController"_を呼び出すときに同じ問題が発生しました

呼び出しをinitWithNibName:NSStringFromClass([MyViewController class])に変更するとうまくいきました

10
yggdraa

次のことを試すことができます。

  1. 大文字小文字が正しいことを確認してください
  2. 「.xib」拡張子なしのxibファイル名を使用
  3. -(ダッシュ)またはその他の特殊文字を削除し、_(アンダースコア)を使用します
  4. プロジェクトからxibファイルを削除し、Xcodeプロジェクトに再度追加します
  5. ビルド設定を確認し、デプロイメントが正しいSDKに変更されていることを確認します
9
darshansonde

私の場合、xibはバンドルにコピーされていませんでした。アプリケーションターゲットの「バンドルリソースのコピー」ステップにxibを追加すると、すべてがうまくいきました。

5
FreeAsInBeer

私はついにこれらの2つのステップでその問題を解決することができました:

  1. ビューコントローラーファイルインスペクターで、ローカリゼーションを削除します(テストのみ)。
  2. 正しいターゲットメンバーシップを確認したことを確認します

なぜシミュレータで動作するのかわかりません:(

3
Alex

私にとって、問題はまさにFreeAsInBeerが言ったことでした:nibはどういうわけかバンドルから欠落していましたが、以前はそこにあり、アプリの以前のバージョンでは適切に機能していました。

この問題を解決するために、次のことを行いました。

  1. プロジェクトナビゲーターでプロジェクトを選択します。
  2. プロジェクト設定でビルドフェーズを選択します。
  3. バンドルリソースのコピーを展開します。
  4. (必要に応じて)下にスクロールして、+ボタンをクリックします。
  5. 表示されるダイアログで、Add Other ...ボタンをクリックします。
  6. ファイルシステムで見つからない.XIBファイルを参照します。
  7. ビルドして実行...実行すると、不足しているnibが表示されます。

これは私がそのメッセージを受け取ったときに私にとってうまくいったことです。状況は誰にとっても同じではないため、マイレージは異なる場合がありますが、これがこの問題に遭遇した人に役立つことを願っています。

-エヴァン

3
Evan Stone

このエラーの原因となる単純な間違いは、個々のNibファイルではなくストーリーボードを使用しているときに、インポートされたviewControllerでinitWithNibNameを試行することです。この場合は、存在しないnibで初期化しようとする代わりに、コントローラーを初期化するか、それらのフィールドをnilで初期化してください。

Storyboardでnibがない場合は、initWithNibName:bundle:をinit OR initWithNibName:nil bundle:nilに変更します。

2
ColossalChris

同じエラーメッセージが表示されました。しかし、私の問題は、私の電話の言語設定が「英語」に設定され、地域が「英国」に設定されていることでした。ただし、ロードできなかったファイルはde.lprojディレクトリに置かれました。ファイルをルートディレクトリに移動すると解決しました。

2
Burny

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

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

2
vesselhead

私は正確にあなたが説明した振る舞いを持っていました:シミュレーターで動作しますが、デバイスで実行すると「バンドルでNIBをロードできませんでした」を取得し、アプリは起動イメージで動かなくなります。

私の場合、問題はXcodeが英語のローカリゼーションで自動的に作成したMainWindow.xibファイルに関するものでした。アプリで英語とイタリア語をサポートしていますが、イタリア語用のローカライズ版のMainWindow.xibがないことに気付きました。

このファイルをローカライズする必要がなかったので(ローカライズを作成するためのXcodeのデフォルトです)、英語のローカライズを削除するだけで問題を修正し、ローカリゼーションとは無関係に同じファイルを使用しました。問題を修正するもう1つの方法は、必要に応じて、不足しているローカライズ版を追加することです。

デバイスがイタリア語に設定されているため、アプリがデバイスでクラッシュしていました。代わりにシミュレータが英語に設定されていたため、アプリが正しく実行されました。確認のために、シミュレーターをイタリア語に設定し、アプリがクラッシュしてローカライズの問題を確認しました。

1
Gengis

右側のウィンドウのxibからすべてのローカリゼーションを削除して実行します。多分ファイルはローカリゼーションフォルダーにあります。

1
Michael

また、initViewCoderから子ビューコントローラをロードしたときにもこの問題が発生しました。これは初期化に適した場所ですが、ビューがロードされた後で実際の子として追加する必要があることに注意してください。

次のようにシフトしてください:

[self addChildViewController: self.pageViewController];
[self.view addSubview: self.pageViewController.view];
[self.pageViewController didMoveToParentViewController:self];

...あなたのinitメソッドからviewDidLoadへ。これは特にあなたの問題ではありませんが、これは他の人に役立つかもしれません。

1
PostCodeism

その価値については、タブバーボタンの1つに間違ったクラスが割り当てられていると、このエラーが発生しました。

1
bbeckford

私も同じ問題を抱えています。そして私の解決策は、ビューのすべてのローカリゼーションを削除することです。

1
JSanchez