web-dev-qa-db-ja.com

バンドルNSBundleに「MainStoryBoard」という名前のストーリーボードが見つかりませんでした

私は数日前に新しいアプリを開始し、シミュレータと連携してテストを開始しました。空のプロジェクトとして開始し、ストーリーボードを手動で追加しました。シミュレーターはアプリを正常にビルドして実行しますが、iPhoneにビルドしようとすると、メッセージ「」を取得しますバンドルNSBundle '。

Googleは何も表示せず、 この質問 ストーリーボードのターゲットを確認することを提案しましたが、すべてが整っています。それでも、何かが適切に配置されていないと、シミュレータも実行されません。

誰かが私を正しい方向に向けることができますか?

45
chriskievit

シミュレータは大文字と小文字を区別しませんが、デバイスは区別します。ストーリーボードがMainStoryBoardではなくMainStoryboardと呼ばれる場合、これが問題の原因になります。

35
jrturton

IPhone Simulatorでアプリを正常に動作させましたが、奇妙なことにXcodeが応答しなくなり、Xcodeを強制終了しなければなりませんでした。 Xcodeを再起動すると、「MainStoryboardという名前のストーリーボードが見つかりませんでした...」、

以下の手順に従って、この問題を修正しました。

  1. 「MainStoryboard.storyboard」の名前を「MainStoryboard_1.storyboard」に変更
  2. 「サポートファイル」フォルダーにある「$ your_app $ -Info.plist」ファイルを開きます。 「メインストーリーボードファイルのベース名」を「MainStoryboard_1.storyboard」に編集します。
  3. アプリを再実行すると、うまくいきました。
  4. ストーリーボードファイルの名前を元の「MainStoryboard.storyboard」に戻しました。
  5. .plistファイルを編集して元に戻しました。
  6. アプリを再実行すると、うまくいきました。

何らかの理由で、Xcodeを強制終了し、上記の手順に従ってアプリがファイルを再度認識した後、ファイル「MainStoryboard.storyboard」が認​​識されませんでした。

このソリューションが役立つことを願っています。

76
Sushma Satish

私が遭遇したシナリオに言及したいだけです。方法はわかりませんが、ストーリーボードはまだプロジェクトの一部でしたが、ターゲットから切断されました。これを修正するために、ストーリーボードを開き、[ファイルインスペクター](右パネルの左端のアイコン)を選択し、[ターゲットメンバーシップ]でプロジェクトを確認しました。それが誰かを助けることを願っています。

24
Ilya K.

この問題は、「Use Base Internationalization」の選択を解除し、特定のローカリゼーションではなく異なるロケールでシミュレーターを実行したときに発生します。

たとえば、プロジェクト設定でzh-CNのローカライズを指定しますが、en-USでシミュレーターを実行します。

9
Igotit

上記のすべてのソリューションを試しましたが、機能しませんでした。

徹底的な調査の後、犯人が見つかりました:

ターゲットからコピーバンドルリソースが欠落していました->ビルドフェーズ

これは、Cocoapodの削除中に誤って削除されました。

これを修正する手順は次のとおりです。

  1. プロジェクトのTARGETSに移動します
  2. 左上隅にあるplus (+) buttonをクリックします
  3. ドロップダウンから[バンドルリソースの新規コピー]を選択します
  4. 次に、Storyboard files (Main, Launchscreen etc).を追加し、Assetsフォルダーも追加します。これらのファイルを追加するには、下部にあるプラス(+)ボタンをクリックします

screenshot

  1. derived data content
  2. Delete the app Simulator/Deviceから再実行
6

これは、タブバーのあるアプリの助けになりました(Swift 2.1、Xcode 7.2)

    let storyboard: UIStoryboard = UIStoryboard(name:"Main",bundle: NSBundle(forClass: self.dynamicType))
    let tabController = storyboard.instantiateViewControllerWithIdentifier("MyTabBarIdentifier") as! UITabBarController

Main.storyboardには、正しいターゲットメンバーシップ、バンドルリソースのコピー、ビルドフォルダーのクリーンアップなどがありました(ほとんどの答えはこれを指していました)。

4
Nitin Alabur

ストーリーボードを削除したのではないかと思い、アプリの初回起動時に.xibファイルを使用することにしました。このシナリオでは、Xcodeは存在しないストーリーボードを見つけようとします。

この場合、プロジェクトをクリックします> Info> Custom iOS Target Propertiesそして、このキーと値のペアを削除します:Main storyboard file base name

4
Venkatesh G

ソースコードのナビゲーションに使用している場合は、以下のコードを使用してみてください

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];

多くの場合、人々は名前に「Main.storyboard」と入力します。これは文字通りファイルの名前ですが、Obj-Cコーディングの目的上、「X.storyboard」の名前は「X」なので、この場合、 @"メイン"。

3
abdul sathar

Nitin Alabur の回答は私を助けましたが、間接的に役立ちました。明確にするために別の回答を投稿する:

ストーリーボードを内部に持つ動的なフレームワークを構築しています。フレームワークをテストするために構築しているテストアプリでは、このエラーが発生していました。

私のコードは次のように見えました。

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MyStoryboard" bundle:nil];

NSBundleを無視していたのは、ちょっと、バンドルが一体何なのかわからないからです。このユースケースでは、ストーリーボードがアプリケーションの「バンドル」の外側に存在することが重要であることがわかりました(代わりにフレームワークのバンドル内にあります)。このコードは、現在のクラスが存在するバンドル内のストーリーボードを見つけるようiOSに指示します(私にとっては、フレームワークを含むバンドルです)。

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MyStoryboard" bundle:[NSBundle bundleForClass:[self class]]];
3
manroe

私も同じ問題を抱えていました。このタイプの例外の原因は、「Main」ではなく「Main.storyboard」と書いていたことです。 .storyboard拡張子を指定する必要はありません。

3
Waaheeda

単純なCleanでエラーが修正されました。

プロジェクトに移動してターゲットを選択し、メニューからプルダウンしてストーリーボードを再選択します。

また、plistを更新できます。一方を変更しても他方は変更されないことがわかりました。

2
Raymond Jones

設定ファイル(.plist) 下 Supporting filesフォルダ

デフォルトのストーリーボードの名前を確認してください。

2
Gabox

この問題は、ストーリーボードをコードで呼び出していたときに発生しました。理由は、ストーリーボードに別の「Word」を使用していたためです。

ターゲット->情報に移動して、情報を選択し、ストーリーボードの名前をコピーして、ストーリーボードを呼び出している場所に貼り付けます。

少なくとも試してみてください…。

1
Suraj K Thomas

これは、シミュレータに同じ名前の以前のアプリがインストールされていたときに起こりました。

以前のアプリを削除し、「展開情報」でストーリーボードを再選択し、アプリを再実行すると、すべてが正常に機能しました。

1
josetapadas

Xcodeの2回目のインストールで誤ってプロジェクトを開いたときに、この問題が発生しました。プロジェクトファイルが完全に破損しました(これは理解できます)。

1
John Sjölander

これを防ぐために、ストーリーボードファイルの操作方法を変更する必要がありました。ストーリーボードを編集したら、ファイルを保存してからXCodeを終了します。これにより、問題の発生を防ぐことができます。

1
Aaron Havens

非常にばかげたものですが、"メインストーリーボードファイルのベース名(iPad)"に "MainStoryboard.storyboard"が含まれていました。

0
lorenzo

2つの可能性があります。

  1. ストーリーボードがターゲットに追加されていることを確認してください。

Select Storyboard > Go to file inspector (first right tab) > Check Target Membership

enter image description here

  1. 適切なbundleでストーリーボードを初期化します。

    • ストーリーボードが作業中の同じターゲットにある場合は、bundle = nil
    • ストーリーボードが作業中のターゲットと異なるターゲットにある場合は、バンドルとストーリーボードを初期化するために次のコードを試してください。

      let bundle = Bundle(for: MyClass.self)
      let storyboard = UIStoryboard(name: "Main", bundle: bundle)
      
0
Zaid Pathan

UIAppFontsに約150個のフォントを追加すると、デバイスでこのエラーが発生しました。
数を約100に減らした後、それはなくなりました。

0
Dan Abramov

私にとっての解決策は、MainStoryboardをBundle Resourcesに追加するだけでよいということでした。その後、正常に動作します。

プロジェクト->ビルドフェーズ->バンドルリソースのコピー-> +ボタンをクリックして、ファイルを追加します。

ビルドフェーズ>バンドルリソースのコピーでinfo.plistに移動し、アイコン「+」を使用してストーリーボードを追加します

0
Angel Guevara

MainStoryboard.storyboardやMainStoryboard〜iPad.storyboardのように、〜iPadまたは〜iPhoneのサフィックスの有無にかかわらずストーリーボードがあるプロジェクトでこの問題が発生しました。

問題は、MainStoryboard.storyboardがビルドディレクトリにコンパイルされたときにMainStoryboard〜iPad.storyboardを上書きしていたことです。ファイルが逆の順序でコンパイルされた場合、両方とも問題なく保存されます。これが起こる理由はわかりません。

これを回避するには、〜iPad/iPhoneサフィックスの使用を停止するか、バンドルリソースのコピーフェーズでファイルが正しい順序であることを確認します。

(XCode6.2beta2を使用)

0
akiraspeirs

IOS simを最近デフォルト設定にリセットした場合、その環境設定でロケール設定を確認することも役立ちます。私はロシア語を唯一のロケールとしてアプリで作業していますが、simのロケールが英語に設定されているため、simのリセット後にxCodeが停止してアプリが起動しました。

0
Arseniy

同様の問題があり、次のエラーが発生していました。

 exception 'NSInvalidArgumentException'、理由: 'バンドルNSBundle 
で' MainStoryboard_iPhone 'という名前のストーリーボードが見つかりませんでした

Plistファイルを更新して修正しました。ワークスペースで[編集]-> [検索]-> [検索]に移動し、「ストーリー」を検索します。ストーリーボードの適切な名前を更新します。

0
Gajen Sunthara

私の場合、それはMacアプリケーションのフレームワーク内のストーリーボードでした。私が使用していた:

let storyboard = NSStoryboard(name: "StoryboardName", bundle: nil)

フレームワークのバンドル識別子を使用して正しいバンドルを取得する必要がありました。

let storyboard = NSStoryboard(name: "StoryboardName",
                            bundle: Bundle(identifier: "com.company.FrameworkName"))
0
Andrew