web-dev-qa-db-ja.com

STORYBOARD-識別子付きのView Controllerが含まれていません

次のエラーが表示されます。

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を設定していますが、まだこのエラーが発生しています。

enter image description here


165
mat

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

enter image description here

Navigation View Controllerも削除したため、2つのTable View Controllerが「プッシュ」アニメーションに直接接続されました。

***** XCODE 7.0の編集*****

storyboardIdを設定する必要があります(この場合、viewControllerはNavigation Controllerに埋め込まれています:

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

enter image description here

41
mat

将来の参考のために:

Storyboardsを使用してiOS 6で開発しています。

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

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

参考のために以下の画像があります:(この例では、クラスと同じ識別子に名前を付けています) enter image description here

237
khaliq

XCODE 7 | 8 | 9では、

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

ちょうどCLEANプロジェクト(CMD + SHIFT + K

181
Ted

用語間に混乱がある場合があります。

// Swift 4
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です。時々、人々は2つの違いについて混乱し、最初の1つは実際にStoryboardIDであり、2つ目はViewControllerクラス名であると信じています。

Storyboard ID

このことについて混乱が見られるので、Swiftの多くの新しいプログラマーを同様の問題で引き付けるこの質問に投稿しようと思いました。

14
Rafael

Xcode 6.3.2のStoryboard IDという名前のIdentity InspectorタブにあるIdentityで、Use Storyboard IDオプションをオンにしました。 enter image description here

14
BeyazBaron

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

9

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

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

4
confitz20

私はそれを見つけました...ストーリーボードのView Controllerをクリックし、VC属性インスペクターの左から3番目のアイコンをクリックしますWord IDをクリックしてstoryboardIDを表示します-コードから識別子を追加します、完了

4
Jon

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

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

ここでは、作成されたストーリーボードのオブジェクトは、ViewControllerを含むメインのストーリーボードではありません。 As ストーリーボードファイル作業対象はMain.storyboardです。そのため、Main.storyboardのオブジェクトの参照が必要です。

次のコードを使用してください:

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

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

4
Ravi Bhanushali

IDインスペクター(左の3番目のアイコン)で「ストーリーボードID」を変更する必要があります。

そうでない場合、タイプミスがないことが確実な場合は、プロジェクトをクリーンアップしてみてください( "Product"-> "Clean"、または単にcommand + shift + K)。

4
aychen0110

いくつかのView Controllerに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">
1
Andy

すべてをクリーニングしてXcodeを閉じても、問題は解決しません。

ViewControllerを削除し、新しい識別子を持つ新しいものを作成する必要がありました。

0
user3722523

メインストーリーボードでそれぞれのビューコントローラーを選択し、storyboardIDをチェックして、その名前が名前を指定して使用する識別子で使用されているかどうかを確認します。

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

0
Saba Zehra

XCODE DRAG N DROP PANE IS GONE !!!

enter image description hereenter image description here

0
Mr Heelis

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

0
Priyam

識別子uを入力している間、適切なView Controllerが選択されていませんが、もう一度手順を繰り返してください。

0
iamsult

私は同じエラーを受け取ったので、プロジェクトの次の変更を変更することでこれを修正できました。インスペクタパネルでクラス名について言及したので、問題は解決しました。 Goto->右パネルアイデンティティインスペクターカスタムクラスセクション

class:your class name(ViewController)

[ID]セクションのストーリーボードID:ストーリーボードID(viewController Name)

この後、そこにあるストーリーボードIDを使用するオプションをクリックします。これで問題は解決しました。私はそれがあなたを助けることを願っています...

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

私がしたことは:

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

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

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

0
Darkwonder