web-dev-qa-db-ja.com

ストーリーボードの例外-ストーリーボードには、識別子を持つビューコントローラーが含まれていません

現在、iPhoneとiPadの両方のiOSアプリケーションを開発しています。 NavigationControllerを表示して、ファイルを表示するモジュールを作成しようとしています。 iPhoneでは問題なく動作しますが、iPadでは動作しません。

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

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

そしてこれはコードです:

case 10: // Files
{
  UINavigationController *navigationController = [storyboard instantiateViewControllerWithIdentifier:@"FilesNavigation"];

  FilesViewController *filesViewController = [storyboard instantiateViewControllerWithIdentifier:@"Files"];

  [navigationController pushViewController:filesViewController animated:YES];

  self.slidingViewController.topViewController = navigationController;

  break;
}

ストーリーボードでは、ナビゲーションコントローラーのストーリーボードIDを既に設定しています。

>##Custom Class 
>Class: UINavigationController
>##Identity
>Storyboard ID: FilesNavigation

他のモジュールのスイッチ/ケースブロックの別のケースにこのコードを使用しましたが、iPadでも機能します。初めてこのエラーが発生しました。

19
origds

私はそれを理解しました、問題はストーリーボードがデバイスで更新されていないことでした。

  1. シミュレーター/ iPhone/iPadからアプリをアンインストールします
  2. 製品>クリーン
  3. ビルドして実行

@ T0m_Twtの回答で述べたように 質問

55
origds

右側のウィンドウのIDインスペクターセクションで、ストーリーボードIDをナビゲーションコントローラーに提供します。

私はあなたのためにスクリーンショットを撮りました

enter image description here

11
meda

これは別のケースです:

ローカライズされたストーリーボードが2つあります。必要なビューコントローラを備えているのはそのうちの1つだけです。

9
Nix Wang

偶然にも、iPhone用のストーリーボードとiPad用の別のストーリーボードはありますか?そうした場合、iPadにはその識別子を持つストーリーボードがない可能性があります。また、iPadで実行する場合は、コードにブレークポイントを設定し、「ストーリーボード」オブジェクトが何であるかを確認します。

各プラットフォームのストーリーボードを提供するUIStoryboardのカテゴリを使用します。

[UIStoryboard storyboardHome]を使用できます。これにより、iPadまたはiPhone固有のどちらが必要かが判断され、返されます。また、ストーリーボードが適切な名前に従っていることを確認します。したがって、Home_iPadとHome_iPhoneを使用します。

1
Justin Holman

TL; DR-すべてをクリアし、古いバージョンのアプリがある場合はそれも削除します。

奇妙に聞こえるかもしれませんが、バンドル名も変更したターゲット名を変更した場合、シミュレーター/デバイスにアプリの古いバージョンと新しいバージョンの両方がインストールされている可能性があり、UIStoryboardインスタンスが一部のビューコントローラーのインスタンス化に失敗しました。これにより、最終的に質問で説明されている問題が発生する可能性があります。それを解決するには、関連するすべてのアプリを削除するか、単にシミュレーター/デバイスをリセットする必要があります。

0
superarts.org