Xcode:「エントリポイントがないためシーンに到達できません」が見つかりません


89

Xcode 4.5.2で次の警告が表示されます。

Unsupported Configuration    
Scene is unreachable due to lack of entry points and does not have an identifier 
for runtime access via -instantiateViewControllerWithIdentifier:.

残念ながら、私は犯罪のシーンを特定できません。課題ナビゲーターで警告を選択しても、ストーリーボードの何も強調表示されません。ストーリーボードはかなり複雑です(30以上のシーン)。

助言がありますか?

警告のスクリーンショット

回答:


50

このスレッドは古いものの、何が効果的かを説明する答えが見当たらないので、ここにいきます

このエラーが発生し、ストーリーボードを視覚的に調べたところ、すべてのビューコントローラーがルートビューコントローラーに接続されているように見えました。

(@bobnobleの答えのように)ストーリーボードで17のビューコントローラすべてに名前を付けてみました。私は、ビューコントローラの長い名前に基づく命名規則を使用しました。たとえば、「ジョブビューコントローラ」の場合は「jvc」です。ビルドしようとすると、ビューコントローラーの1つが重複する名前を持っていることを示すエラーメッセージが表示されました。物事を追跡すると、ツインの上に正確に積み重ねられたビューコントローラーの実際の複製があったことがわかりました。ユーザーインターフェースの実験によるカットアンドペーストによる損傷で、完全には取り消せなかったのではないかと思います。

とにかく、接続されていないツインを削除すると問題が解決しました。その後、コードで参照されていないVC名をすべて削除しました。


3
これも私には起こりましたが、私はまだ多くの空の1つを埋めなければなりませんでしたStoryboard ID
ピエール・ド・レスピーヌ14

...そして、@ bobnobleが√でマークされる正しい答えであると私は信じています
SwiftArchitect 2015年

139

ストーリーボードで、各ビューコントローラー(下の画像の赤い矢印)を選択し、[ストーリーボードID]フィールド(赤い楕円)を確認します。ストーリーボードIDフィールドを空白にすることはできません。それを見つけたら、それが犯人です。

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


6
こんにちは@bobnoble、返信ありがとうございます。1つの質問:なぜすべてのシーンにストーリーボードIDを設定する必要があるのですか?義務だとは思いませんか?プログラムでシーンにアクセスする場合はIDを設定する必要があることはわかっていますが、すべてのシーンがセグエで接続されている場合はどうなりますか?それとも、プログラミングの練習として優れているのでしょうか?
Wolfy

@Wolfy-良い点、セグエまたはストーリーボードIDのいずれかがあることを確認するには、それぞれを確認する必要があります。
bobnoble 2012年

2
この解決策を試してみたところ、特定の1つだけを入力Storyboard IDすると警告が削除されることに気付きました
Pierre de LESPINAY 2014

私はUINavigationControllerいくつかUIViewControllers持っていて、それらすべてに識別子を設定しなければなりませんでした。本当に迷惑な人がいないバグを探しています!
Alex Cio

私のために働く。なぜこれが起こるのか誰か知っていますか?非常に発見できないようです-振り返ると、与えられたエラーはわずかな手掛かりを与えます。ストーリーボードを最新かつ最高のバージョンに変換した後に取得しました-ストーリーボードIDが今必要な場合、以前はそうではなく、自動変換がそれを処理しませんでした。
Josh Sutterfield、2015年

30

単純なシングルシーンのストーリーボードでこの正確なエラーが発生しました。修正するには、ストーリーボードの1つのビューコントローラーの[Is Initial View Controller]チェックボックスをオンにするだけでした。この状況では、デフォルトでこのチェックボックスをオンにするためにXcodeが使用されていたのではないかと思いますが、今後はチェックしません。

下部のチェックボックスをオンにします

                                     

ストーリーボードのビューコントローラーの1つだけのボックスをオンにすると、問題ありません。


1
ありがとう。それでおしまい!
エリックチェン

20

30個すべてを確認し、ストーリーボードIDまたはそのビューコントローラーへのセグエがあるかどうかを確認する必要があります。2つのうち1つは必須ですが、両方ともオプションです。


5
すべてのビューコントローラーにセグエまたはIDが割り当てられた後も、エラーメッセージが表示される場合があります。この場合は、製品を清掃してください。
ReinhardMänner2014年

5
私の場合、エラーを修正した後、製品のクリーンアップだけではエラーメッセージを取り除くには不十分でした。Xcodeを再起動すると消えました。(私はプロジェクトを閉じ
たり、再度開いたり

私も同じです-最終的には、エラーメッセージを取り除くためにxcodeを停止して再起動する必要があります。
MusiGenesis 2016年

8

この問題は、次のいずれかのシナリオで発生する可能性があります。

ケースI: ストーリーボードのどのシーンも"isInitialViewController"としてマークされていない場合。

修正:ルートビューコントローラーを特定し、SBで「isInitialViewController」としてマークします。この場合、ストーリーボードIDは必須ではありません。

ケースII

ストーリーボードにinitialViewControllerを配置する必要がない場合もあります。例:複数のストーリーボードを使用する場合。

修正:このような場合は、「ストーリーボードID」が正しく指定されていることと、このIDを使用してストーリーボードで使用する最初のシーンを参照していることを確認してください。たとえば:

UIStoryboard *myStoryBoard = [UIStoryboard storyboardWithName:@"MyStoryBoardName" bundle:nil];
MyViewController *myViewController = (MyViewController *)[myStoryBoard instantiateViewControllerWithIdentifier:@"MyViewControllerId"];

この場合、「ストーリーボードID」は必須です。

ケースIII

接続されたinitialViewControllerがあります。しかし、それでもこの警告が表示されます。これは、ストーリーボードの一部のシーンが「セグエ」に関連付けられていない可能性があり、また「ストーリーボードID」がないためです。ストーリーボードをスキャンして、「セグエ」が必要かどうかを確認します。それがない場合はセグエを接続します。セグエが必要ない場合は、上記のサンプルコードに示すように、コードからシーンを参照する唯一の方法であるため、「ストーリーボードID」を指定する必要があることを確認してください。

お役に立てれば


ケースIII-助けてくれました。ありがとう!
mrGott 2015年

サンプルプロジェクトに古いxibファイルが付属している場合がありました。...そこからストーリーボード形式や移動にXIBを変換する必要..アプリケーションシーンやメニューを作成する方法を参照することはできません..私はストーリーボードを作成し、私は現在苦しんだ
nyxee

6

Storyboard IDすべてのシーンに設定する必要はありませんUINavigationController

えーと、50から60のシーンがあり、これらの警告が出たので、segueに接続されていないコントローラー(Scene)またはNavigationControllerのみを設定する必要があることに気づきましたStoryboard ID

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

上の画像でUINavigationControllerはセグエとは関係がないことがわかります。それはその警告の原因でした。

この警告を削除するには、ストーリーボードIDを指定するだけです。


5

同じ問題がありました。ストーリーボードには、ナビゲーションおよびタブバーコントローラーを備えた多くのビューがあります。私にとっては、いくつかのビューが接続されていないことを知らせる警告でした。 すべてのビューが何らかの方法でルートビューコントローラーに接続されていることを確認してください。私はこの警告をなくすためにこのプロジェクトをゼロから始めていて、ビューが接続されていないときに同じ警告に気づきました。


これは私に役立ちました。7.1.1を超えるSwift 2を使用しています。最初のStoryBoardがルートビューコントローラーになる必要があります。
Lukesivi 2015年

3

問題のあるシーンを見つける最も簡単な方法:

課題ナビゲーター(左側のパネルの検索ボタンの横)に移動し、エラーをダブルクリックします。ウィンドウは、ウィンドウの中央に中央揃えで問題のあるシーンを含むポップアップが表示されます。

(これは実際には一般的に当てはまります。エラーをダブルクリックすると、通常、エラーが中央に表示されたポップアップが表示されます-きちんとした小さなトリックです!)

補足:ナビゲーションコントローラーのルートビューコントローラー(初期ビューコントローラー)であるシーンに対して、XCodeがこのエラーを誤って与えることがあります。単純な修正は、このルートビューコントローラーにStoryboard IDを与え、コンパイルし(エラーはなくなるはずです)、storyboardIDを削除します(エラーはもうありません)。


「簡単な修正により、このルートビューコントローラーにストーリーボードIDが与えられます」というヒントをありがとうございます。それは私の問題を解決しました。さて、私は 'ストーリーボードID'をUINavigationControllerに与える必要があります。
Mohd Haider

これにより、メインメニューのあるアプリケーションシーンが表示されます。ストーリーボードIDを指定できません。
ダニエル

2

どのコントローラーまたはシーンがこの問題の原因であるかを確認する最も簡単な方法は、次のとおりです。

  • .storyboardプロジェクトナビゲーターでCtrlキーを押しながらクリックして、を選択しOpen As > Source Codeます。これにより、ストーリーボードの基になるXMLが表示されます。
  • このビューでは、警告は、問題のあるシーンに関連するXMLの行に明確に関連しています。

さて、私の場合、「問題のあるシーン」には識別子とセグエがあったため、警告は特に迷惑でした。シーンを削除してから削除を取り消すことで問題を解決できました。エレガントではありませんが、機能しました。これを行う前に、ストーリーボードを保存しました。振り返ってみると、私はコピーを作成し、diffその前と後だったはずです。


2
不思議なことに、これは一貫して機能していないようです。私のバグアウトの状況では、それはうまくいきました。今、私はそれをテストしています、そしてSource Codeビューはエラーを示していません。したがって、走行距離は異なる場合があります。
ドミトリーミンコフスキー2013

これでView Controllerは見つかりませんでしたが、それを削除し(XMLではIDで機能しませんでした)、警告は消えました。
ダニエル

2

私にとって、それはやのせいではありませんでしStoryboard IDSegue。を設定していなかったため、この警告を受け取りましたView Controller's Custom Class

選択View Controllerの上Storyboard、その後にUtilities Pane、選択しIdentity Inspectorたアイコンを。の下Custom Classで、Classフィールド内の値を確認します。

とだけ表示されている場合UIViewControllerは、クラス名を入力する必要があります。これは、カスタムサブクラスを構成する.hおよび.mファイルの名前になりますUIViewController


私はこれについてバリエーションを持っています。ストーリーボードの間違ったViewControllerをViewControllerクラスに一致させましたが、ストーリーボードIDも同じです。
Vince O'Sullivan

2

今日この質問に来ました。私はXcode 6.3を使用しており、OPの質問への答えは非常に簡単です。

最初にするビューコントローラを選択し、属性インスペクタを表示して、[ビューコントローラ]セクションで、

初期ビューコントローラです

チェックされています。ほら!


2

Xcode 7では、これは簡単に処理できます。問題のあるシーンを見つけるために、すべてのシーンを手動で調べる必要はありません。まず、レポートナビゲーターに移動します。ここでは、既知の問題に関する詳細情報を取得できます。問題の説明は次のようになります。

Base.lproj / Main.storyboard:fPh-fe-F5F:警告:エントリポイントがないためシーンに到達できず、-instantiateViewControllerWithIdentifier:を介したランタイムアクセスの識別子がありません。

この情報を使用して、オブジェクトID(この場合はfPh-fe-F5F)をコピーし、ワークスペースでこの文字列の出現を検索できます。文字列はMain.storyboardファイルにあります。検索結果をダブルクリックすると、選択したシーンでMain.storyboardが開きます。問題のあるシーンがわかったら、ストーリーボードIDを設定するか、「Is Initial View Controller」を設定することで、問題を簡単に修正できます


1

識別子を設定するだけです。右側のペインの属性インスペクターに、「識別子」というフィールドがあります。そこに任意の文字列を置くだけで、これはうまくいくはずです

ナビゲーションコントローラーをクリックし、属性インスペクターの下にある[初期ビューコントローラーです]ボタンをクリックすると、これも機能します。


1
Mohammad、返信ありがとうございます。ただし、問題は次のとおりです。どのシーンに識別子を設定する必要がありますか?警告の原因となっているシーンが見つかりません。これが主な問題です。
Wolfy

1

私は同じ問題に直面し、ストーリーボードIDを配置して、すべてのviewControllerとNavigationControllerの識別子も解決しました。エラーはすぐに削除されます

楽しい!!!


0

多分このXQueryはそれらの厄介なシーンを見つけるのに役立ちます

for $i in .//scene/objects/*[1][not(@storyboardIdentifier) or @storyboardIdentifier= '']/@id      (: find every scene that has an empty storyboardIdentifier :)
where count(.//segue[@destination= $i])= 0 and $i!= ./document/@initialViewController             (: filter the results to the scenes that are not destinations of a segue and exclude the initialViewController :) 
return ($i, $i/../@customClass)                                                                   (: return the storyboard-id and the customClass, if any :)

xqillaがインストールされている場合は、クエリをファイルに保存して次のように使用します

xqilla <xqueryfile> -i <path to your storyboard>

0

これがまだ言及されていないかどうかはわかりませんが、この警告が表示されるもう1つの理由は、セグエが間違った方向に進んでいる場合です。たとえば、私のプロジェクトではこの警告が表示されていましたが、実際にはすべてのコントローラーが接続されていました。しかし、そのうちの1人は、親が子供を紹介するのではなく、基本的に子供から親を紹介しようとしたセグエを持っていました。これにより、同じ警告が発生しました。


0

ストーリーボードに何も設定されていないUIViewControllerがあると、この警告が表示されます。Storyboard IDを設定してこの警告を回避しました。


0

同じ問題がありましたが、コンテナービューを使用していて、デフォルトのビューコントローラーを削除する代わりに、そのセグエを削除したことに気付きました。これは、コンテナビューのデフォルトのビューコントローラが不要なときに適切に削除されない場合に警告が表示されるケースの1つです。


0

上記のすべてを試しても無駄になりました。私はすべてをIBで適切に接続しましたが、1つだけでUIViewControllerルートビューコントローラーを指定して。識別子はありませんでしたが、すべてのコントローラーに追加しました。

警告が消える唯一の方法は、上記のすべて(コンピューターの再起動とクリーンビルドを含む)を実行してから、gitでエラーのないプロジェクトのブランチに切り替えて、元に戻すことでした。

どのアクションがそれを修正したのか、またはどのアクションの組み合わせがわからないのかはわかりませんが、それだけではクリーンなビルドではありませんでした。これは、Main.storyboardを開いただけで常に変化する副産物である可能性があります。つまり、必要git commit -m "Stupid storyboard"以上に頻繁に行う必要があります。


0

これが私のために働いたものです:

  1. テキストエディタでストーリーボードを開きます。
  2. バージョンを3.0から2.0に変更して、保存して閉じます。
  3. ビジュアルスタジオでもう一度開きます。ドキュメントを自動的に変換して開きます。

0

同じエラーが発生しました:私のエラーは、ストーリーボードでビューコントローラーを開始しなかったことです。

これを修正すると、その警告は削除されました。


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