私は数日前に新しいアプリを開始し、シミュレータと連携してテストを開始しました。空のプロジェクトとして開始し、ストーリーボードを手動で追加しました。シミュレーターはアプリを正常にビルドして実行しますが、iPhoneにビルドしようとすると、メッセージ「」を取得しますバンドルNSBundle '。
Googleは何も表示せず、 この質問 ストーリーボードのターゲットを確認することを提案しましたが、すべてが整っています。それでも、何かが適切に配置されていないと、シミュレータも実行されません。
誰かが私を正しい方向に向けることができますか?
シミュレータは大文字と小文字を区別しませんが、デバイスは区別します。ストーリーボードがMainStoryBoardではなくMainStoryboardと呼ばれる場合、これが問題の原因になります。
IPhone Simulatorでアプリを正常に動作させましたが、奇妙なことにXcodeが応答しなくなり、Xcodeを強制終了しなければなりませんでした。 Xcodeを再起動すると、「MainStoryboardという名前のストーリーボードが見つかりませんでした...」、
以下の手順に従って、この問題を修正しました。
何らかの理由で、Xcodeを強制終了し、上記の手順に従ってアプリがファイルを再度認識した後、ファイル「MainStoryboard.storyboard」が認識されませんでした。
このソリューションが役立つことを願っています。
私が遭遇したシナリオに言及したいだけです。方法はわかりませんが、ストーリーボードはまだプロジェクトの一部でしたが、ターゲットから切断されました。これを修正するために、ストーリーボードを開き、[ファイルインスペクター](右パネルの左端のアイコン)を選択し、[ターゲットメンバーシップ]でプロジェクトを確認しました。それが誰かを助けることを願っています。
この問題は、「Use Base Internationalization」の選択を解除し、特定のローカリゼーションではなく異なるロケールでシミュレーターを実行したときに発生します。
たとえば、プロジェクト設定でzh-CNのローカライズを指定しますが、en-USでシミュレーターを実行します。
上記のすべてのソリューションを試しましたが、機能しませんでした。
徹底的な調査の後、犯人が見つかりました:
ターゲットからコピーバンドルリソースが欠落していました->ビルドフェーズ
これは、Cocoapodの削除中に誤って削除されました。
これを修正する手順は次のとおりです。
TARGETS
に移動しますplus (+) button
をクリックしますStoryboard files (Main, Launchscreen etc).
を追加し、Assetsフォルダーも追加します。これらのファイルを追加するには、下部にあるプラス(+)ボタンをクリックしますderived data content
Delete the app
Simulator/Deviceから再実行これは、タブバーのあるアプリの助けになりました(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には、正しいターゲットメンバーシップ、バンドルリソースのコピー、ビルドフォルダーのクリーンアップなどがありました(ほとんどの答えはこれを指していました)。
ストーリーボードを削除したのではないかと思い、アプリの初回起動時に.xibファイルを使用することにしました。このシナリオでは、Xcodeは存在しないストーリーボードを見つけようとします。
この場合、プロジェクトをクリックします> Info
> Custom iOS Target Properties
そして、このキーと値のペアを削除します:Main storyboard file base name
ソースコードのナビゲーションに使用している場合は、以下のコードを使用してみてください
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];
多くの場合、人々は名前に「Main.storyboard」と入力します。これは文字通りファイルの名前ですが、Obj-Cコーディングの目的上、「X.storyboard」の名前は「X」なので、この場合、 @"メイン"。
Nitin Alabur の回答は私を助けましたが、間接的に役立ちました。明確にするために別の回答を投稿する:
ストーリーボードを内部に持つ動的なフレームワークを構築しています。フレームワークをテストするために構築しているテストアプリでは、このエラーが発生していました。
私のコードは次のように見えました。
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MyStoryboard" bundle:nil];
NSBundle
を無視していたのは、ちょっと、バンドルが一体何なのかわからないからです。このユースケースでは、ストーリーボードがアプリケーションの「バンドル」の外側に存在することが重要であることがわかりました(代わりにフレームワークのバンドル内にあります)。このコードは、現在のクラスが存在するバンドル内のストーリーボードを見つけるようiOSに指示します(私にとっては、フレームワークを含むバンドルです)。
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MyStoryboard" bundle:[NSBundle bundleForClass:[self class]]];
私も同じ問題を抱えていました。このタイプの例外の原因は、「Main」ではなく「Main.storyboard」と書いていたことです。 .storyboard拡張子を指定する必要はありません。
単純なCleanでエラーが修正されました。
プロジェクトに移動してターゲットを選択し、メニューからプルダウンしてストーリーボードを再選択します。
また、plistを更新できます。一方を変更しても他方は変更されないことがわかりました。
設定ファイル(.plist
) 下 Supporting files
フォルダ
デフォルトのストーリーボードの名前を確認してください。
この問題は、ストーリーボードをコードで呼び出していたときに発生しました。理由は、ストーリーボードに別の「Word」を使用していたためです。
ターゲット->情報に移動して、情報を選択し、ストーリーボードの名前をコピーして、ストーリーボードを呼び出している場所に貼り付けます。
少なくとも試してみてください…。
これは、シミュレータに同じ名前の以前のアプリがインストールされていたときに起こりました。
以前のアプリを削除し、「展開情報」でストーリーボードを再選択し、アプリを再実行すると、すべてが正常に機能しました。
Xcodeの2回目のインストールで誤ってプロジェクトを開いたときに、この問題が発生しました。プロジェクトファイルが完全に破損しました(これは理解できます)。
これを防ぐために、ストーリーボードファイルの操作方法を変更する必要がありました。ストーリーボードを編集したら、ファイルを保存してからXCodeを終了します。これにより、問題の発生を防ぐことができます。
非常にばかげたものですが、"メインストーリーボードファイルのベース名(iPad)"に "MainStoryboard.storyboard"が含まれていました。
2つの可能性があります。
Select Storyboard > Go to file inspector (first right tab) > Check Target Membership
適切なbundle
でストーリーボードを初期化します。
bundle = nil
ストーリーボードが作業中のターゲットと異なるターゲットにある場合は、バンドルとストーリーボードを初期化するために次のコードを試してください。
let bundle = Bundle(for: MyClass.self)
let storyboard = UIStoryboard(name: "Main", bundle: bundle)
UIAppFonts
に約150個のフォントを追加すると、デバイスでこのエラーが発生しました。
数を約100に減らした後、それはなくなりました。
私にとっての解決策は、MainStoryboardをBundle Resourcesに追加するだけでよいということでした。その後、正常に動作します。
プロジェクト->ビルドフェーズ->バンドルリソースのコピー-> +ボタンをクリックして、ファイルを追加します。
ビルドフェーズ>バンドルリソースのコピーでinfo.plistに移動し、アイコン「+」を使用してストーリーボードを追加します
MainStoryboard.storyboardやMainStoryboard〜iPad.storyboardのように、〜iPadまたは〜iPhoneのサフィックスの有無にかかわらずストーリーボードがあるプロジェクトでこの問題が発生しました。
問題は、MainStoryboard.storyboardがビルドディレクトリにコンパイルされたときにMainStoryboard〜iPad.storyboardを上書きしていたことです。ファイルが逆の順序でコンパイルされた場合、両方とも問題なく保存されます。これが起こる理由はわかりません。
これを回避するには、〜iPad/iPhoneサフィックスの使用を停止するか、バンドルリソースのコピーフェーズでファイルが正しい順序であることを確認します。
(XCode6.2beta2を使用)
IOS simを最近デフォルト設定にリセットした場合、その環境設定でロケール設定を確認することも役立ちます。私はロシア語を唯一のロケールとしてアプリで作業していますが、simのロケールが英語に設定されているため、simのリセット後にxCodeが停止してアプリが起動しました。
同様の問題があり、次のエラーが発生していました。
exception 'NSInvalidArgumentException'、理由: 'バンドルNSBundle で' MainStoryboard_iPhone 'という名前のストーリーボードが見つかりませんでした
Plistファイルを更新して修正しました。ワークスペースで[編集]-> [検索]-> [検索]に移動し、「ストーリー」を検索します。ストーリーボードの適切な名前を更新します。
私の場合、それはMacアプリケーションのフレームワーク内のストーリーボードでした。私が使用していた:
let storyboard = NSStoryboard(name: "StoryboardName", bundle: nil)
フレームワークのバンドル識別子を使用して正しいバンドルを取得する必要がありました。
let storyboard = NSStoryboard(name: "StoryboardName",
bundle: Bundle(identifier: "com.company.FrameworkName"))