ストーリーボードにIDのあるビューコントローラーが含まれていません


175

次のエラーが発生し続けます。

Storyboard (<UIStoryboard: 0x7ebdd20>) doesn't contain a view controller with identifier 'drivingDetails'

これはコードです:

- (void)tableView:(UITableView *)tableView 
        didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

   UIViewController *controller =  [self.storyboard instantiateViewControllerWithIdentifier:@"drivingDetails"];
   controller.title = [[dao libraryItemAtIndex:indexPath.row] valueForKey:@"name"];
   [self.navigationController pushViewController:controller animated:YES];
}

はすでにidentifierオンに設定していますが、UIStoryboardまだこのエラーが発生します。

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



4
ビューコントローラではなく、セグエの識別子を設定したようです。その写真のどのビューコントローラを提示しようとしていますか?そして、なぜセグエを使用しないのですか?
Firoze Lafeer、2011年

Driving View Controllerまではうまく機能します。TableViewControllerを表示しようとするときよりもエラーが発生します。どうすればよいでしょうか。
マット

ストーリーボードに移動し、そのストーリーボードIDを削除して、もう一度追加します。ビルドフォルダーと派生データをクリーンアップする必要がある場合があります
onmyway133

回答:


244

将来の参考のために:

iOS 6でストーリーボードを使用して開発しています。

同じ問題が発生していましたが、インスペクターで[識別子]フィールドが見つかりませんでした。代わりに、「ストーリーボードID」という名前のフィールドに、識別子の名前を設定します。このフィールドは、インスペクターの[IDインスペクターの表示]タブにあります。

[注-以下のコメントは、一部の人々が、インスペクターでストーリーボードIDのすぐ下に「復元ID」フィールドを設定する必要があることもわかっていることを示しています。[ストーリーボードIDを使用]をクリックしても十分ではないようです。]

参照用に以下の画像があります:(この例では、自分の識別子を自分のクラスと同じ名前にしました) ここに画像の説明を入力してください


24
XCode 4.4以前のバージョン:識別子。XCode 4.5:ストーリーボードID
ilmiacs 2012

情報をくれてありがとう。Googleの説明に従ってストーリーボードで識別子を見つけるのに苦労しましたが、Xcode4.6で識別子を見つけることができませんでした。これは初心者にとって大きな問題です。ありがとう。
初心者

4
私にとってうまくいったのは、ReuseIndentifierを使用することでした。ストーリーボードIDは依然としてnullポインタ例外を引き起こします。
ドロイドクリス

ここで同じケース@DroidChris
アーメド

5
「ストーリーボードIDを使用する」をチェックして私を幸せにしました
preetam

189

ではXcodeの7から11

ストーリーボードIDを変更してこのようなエラーが発生した場合、

プロジェクトをクリーンアップするだけ(CMD+ SHIFT+ K


13
なぜこれをいつも忘れるのですか?それは最もクレイジーな問題を修正します。テッド、思い出させてくれてありがとう!
AlphaCodaSeven 2015年

2
この問題は、ストーリーボードのVCに識別子が割り当てられているリポジトリからプルすると、XCode 7.2で発生しました。プロジェクトをクリーンアップすることで問題は解決したようです。
Ed George

2
私は私の心を失っていると思った...単純なセグエが機能していなかった、これはトリックをしました。
dokun1

2
はいその動作!!!! xcodeプロジェクトをクリーンアップすると、プロジェクトへの不要な参照が削除されます
kiran

3
私はAndroid StudioとAndroid開発から来ています。これは、XCodeとSwiftで使用しなければならないハッキングの数に夢中です。本当に泣かないと。真剣に。
ktamas

43

修繕!セグエの識別子を設定する必要があるだけでなく、私の場合はDrivingDetailsだけでなく、tableViewControllerの識別子もDrivingDetailsとして設定する必要があります...画像を確認してください:

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

ナビゲーションビューコントローラーも削除したので、2つのテーブルビューコントローラーが「プッシュ」アニメーションに直接接続されます。

***** XCODE 7.0用に編集*****

storyboardIdを設定する必要があります(この場合、viewControllerはナビゲーションコントローラに埋め込まれています:

let lastMinVc  = mainStoryBoard.instantiateViewControllerWithIdentifier("lastMinuteNavController") as! UINavigationController

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


2
私はこの質問に似た問題に
遭遇

上記の答えを見ましたか?もっと更新されたと思います。ありがとう
マット

1
セグエの識別子はこれとは関係ありません。ストーリーボードに設定する必要があるのは、ビューコントローラーのストーリーボードIDだけです。
Jawwad 2013

おそらく関連しています。iOS7では[storyboard instantiateViewControllerWithIdentifier]、View Controller内のInterface Builderからビューをインスタンス化していません。iOS6ではそうでした
William Entriken 2013

30
let storyboard = UIStoryboard(name: "StoryboardFileName", bundle: nil)
let controller = storyboard.instantiateViewController(withIdentifier: "StoryboardID")
self.present(controller, animated: true, completion: nil)

注意:

  • "StoryboardFileName"、ファイル名ストーリーボードのとではありませんのIDでは!
  • "StoryboardID"そのストーリーボードのIDインスペクターで手動で設定したIDです(下のスクリーンショットを参照)。

ストーリーボードID

最初のものがストーリーボードIDであり、2番目のものがビューコントローラクラス名であると人々が信じる場合があるので、違いに注意してください。


1
この!!あなたは私の18時間の謎を解きました。簡潔な説明ありがとうございます。
mrfevrier

1
イエス・キリスト!これをありがとう!.instantiateViewController(withIdentifier: "StoryboardID")名前を変更する.instantiateStoryboard(withIdentifier: "StoryboardID")か、単にもっと単純なものにするUIStoryboard(name: "StoryboardFileName", bundle: nil).init()
roosevelt

16

Xcode 6.3.2のStoryboard IDという名前のIdentity InspectorタブにあるIdentityで、Use Storyboard IDオプションをオンにしました。 ここに画像の説明を入力してください


これはずっと問題でした、私が問題を抱えていた両方の場所でこれはうまくいきました。Storyboard ID値が設定されているだけでなく、「Use Storyboard ID」確認する必要があります
Tyler Hack

「ストーリーボードIDを使用する」は私にとって欠けている重要な部分でした。ありがとうございました。
マーシー

9

ストーリーボードに新しいVCを追加した後、この問題が発生しましたが、デバイスではなく、シミュレータではありません。ストーリーボードのローカリゼーションが複数あることが原因であることがわかりました-VCはプライマリVCにのみ追加されました。他のローカリゼーション(そのうちの1つは私のiPhoneが使用しているもの)を削除しようとしましたが、まだエラーがありました。最後に、私は他のローカライズを再作成しなければならなかったとのそれらのそれぞれの新しいVC。


5

コンパイラは次のエラーを示します:

Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: 'Storyboard (<UIStoryboard: 0x7fedf2d5c9a0>) doesn't contain a 
ViewController with identifier 'SBAddEmployeeVC''

ここで作成されるストーリーボードのオブジェクトは、ViewControllersを含むメインのストーリーボードではありません。ストーリーボードファイル我々の仕事は次のように命名されている Main.storyboard。したがって、Main.storyboardのオブジェクトの参照が必要です。

そのために次のコードを使用します。

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

これstoryboardWithNameは、作業しているストーリーボードファイルの名前であり、ストーリーボードが含まbundleれているバンドル(つまりmainBundle)を指定します。


5

@Ravi Bhanushaliと同じ問題のある人のために、ここにSwift 4ソリューションがあります:

let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)


@Raviの回答にコメントを追加する必要があります。
スニル2018

評判はありますが、ありません。十分な評判のある人は、そうすることを歓迎します
confitz20

4

ストーリーボードでビューコントローラーをクリックし、vc属性インスペクターの左から3番目のアイコンをクリックします-そのシーンで呼び出し名を設定したものに、「identity」と表示されています-私は隠されていました、私は「アイデンティティ」という単語をクリックすると、storyboardIDが表示されます-コードから識別子を追加します


4

IDインスペクター(左側の3番目のアイコン)で「ストーリーボードID」を変更すると、機能するはずです。

そうでなく、タイプミスがないと確信している場合は、プロジェクトをクリーンアップしてみてください(「製品」->「クリーン」、または単にコマンド+シフト+ K)。


私を助けた。ありがとう。(特にクリーニングに関する部分)
Jay

1

識別子uを入力している間、適切なビューコントローラを選択していません。完了したら、もう一度確認してください。手順をもう一度繰り返してください。


どのView Controllerを選択する必要がありますか?すみません、混乱しています。
マット

TableViewController * controller = [self.storyboard instantiateViewControllerWithIdentifier:@ "drivingDetails"]; controller.title = [[dao libraryItemAtIndex:indexPath.row] valueForKey:@ "name"]; [self.navigationController pushViewController:controller animated:YES]; このような?
マット

画像のとおり、そのコントローラーに詳細を表示するために実行しているように、TableViewControllerを選択する必要があります。
iamsult 2011年


1
セグエ識別子とビューコントローラ識別子が異なることに注意してください。両方に同じ名前を使用しているため、混乱が生じた場合に備えて強調したいと思います。セグエ識別子はprepareForSegueで使用するためのもので、ビューコントローラー識別子はストーリーボードから直接ビューをロードするためのものです。scott-sherwood.com/?p=219
Scott Sherwood

1

ビューコントローラーのいくつかに、storyboardIdentifier属性がありませんでした。

前:

<viewController
    id="pka-il-u5E"
    customClass="YourViewControllerName"
    customModule="ModuleName"
    customModuleProvider="target"
    sceneMemberID="viewController">

後:

<viewController
    storyboardIdentifier="YourViewControllerName"   <----
    id="pka-il-u5E"
    customClass="YourViewControllerName"
    customModule="ModuleName"
    customModuleProvider="target"
    sceneMemberID="viewController">

0

同じエラーが発生しました。プロジェクトで次の変更を加えることでこれを修正できます。インスペクターパネルでクラス名を述べたところ、問題は解決しました。Goto-> right panel there Identity Inspector in the custom class section

クラス:あなたのクラス名(ViewController)

Identityセクションで、ストーリーボードID:ストーリーボードID(viewController Name)

この後、[ストーリーボードIDを使用]オプションをクリックします。これで問題は終了です。お役に立てれば幸いです。


0

識別子(@ "drivingDetails")をストーリーボードIDとして使用します。


0

メインストーリーボードでそれぞれのビューコントローラーを選択し、ストーリーボードIDを確認するだけの簡単な方法です。

ここで私の最初の人はstoryboardIDですlet vc = self.storyboard?.instantiateViewController(withIdentifier: "firstone")as!tabBarViewController


0

上記の解決策をすべて試しましたが、どれもうまくいきませんでした。

私がしたことは:

  • プロジェクトのクリーン
  • 派生データを削除する
  • Xcodeを再起動します
  • 前の回答で示されたStoryboardIDを再入力します(IB内)。

そしてそれはうまくいった。衝撃的なのは、インターフェイスビルダーでStoryboar IDを入力していて、Xcodeを再度開いた後に削除/削除されたことです。

これが誰かを助けることを願っています。


0

すべてをクリーンアップしてXcodeを閉じても問題は解決しませんでした。

私はviewControllerを削除して、新しい識別子で新しいものを作成する必要がありました。


0

注:プロジェクトでココアポッドを使用する場合は、最初に実行pod deintegrateしてrm Podfile.lock

次に、VSCodeなどのサードパーティのコードエディターでプロジェクトフォルダーを開き、ViewController名をグローバル検索してエラーをスローします。

  1. あなたが見つけたすべての間違った名前を変更/修正します。
  2. すべての変更を保存します。
  3. プロジェクトをクリーンアップしてビルドします。

すべてが正常に動作するはずです。

これは、多くの場合、Xcode内からファイルの名前を変更したときに発生します。


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