5

アプリにタイムアウト アクションを実装しています。このスタックオーバーフロー スレッド iOS は、非アクティブ期間 (ユーザーの操作なし) の後にアクションを実行し、まったく同じアプローチに従いましたが、ここで新しいビュー コントローラーに移行しようとするとアプリがクラッシュします。

UIStoryboard *myStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:NULL];

UIViewController *cont = [myStoryboard instantiateViewControllerWithIdentifier:@"abc"];

ストーリーボード ID の下のストーリーボード ファイルに abc という名前を付けました。ビューコントローラーをロードする他の方法はありますか? これの何が問題なのですか? アプリがクラッシュするのはなぜですか?

これは、コンソールからのクラッシュ メッセージです。

キャッチされていない例外 'NSInternalInconsistencyException' が原因でアプリを終了しています。理由: 'バンドルに NIB を読み込めませんでした"

ロードしようとしているこのコントローラーに関連付けられた .xib ファイルがありません。abc.h と abc.m ファイルしかありません。しかし、ストーリーボード ファイルにはたくさんのビュー コントローラーがあり、その中でビュー コントローラーの 1 つのクラスを "abc" として指定しています。足りませんか?または、ビューコントローラーをロードする最良の方法は何ですか? セグエを使用していますか?

4

1 に答える 1

6

あなたの例外について - あなたのストーリーボードはおそらくメインバンドルにコピーされていません。これを参照してください。

また、このメソッドinstantiateViewControllerWithIdentifierStoryboard ID、View Controller の名前ではなく、Storyboard 自体で定義された を使用します。ストーリーボードから特定のビュー コントローラーをインスタンス化する方法の詳細については、こちらを参照してください。またはinstantiateInitialViewController、最初のビュー コントローラー (ストーリーボードで矢印が指すもの) を初期化する場合は を使用してください。

編集: などの名前修飾子を持つストーリーボードが内の内部 iOS メカニズムで混乱Storyboard_ipadを引き起こすiOS のバグが原因で、例外が発生します。解決策は、この命名規則の使用を避け、場合によってはヘルパー関数を記述して、現在のデバイス イディオムを調べてロードするストーリーボード名を選択することです。Storyboard_iphone[UIStoryboard storyboardWithName:bundle:]

于 2013-07-15T18:19:50.010 に答える