iOS 7-デフォルトのビューコントローラーのインスタンス化に失敗する


93

新しく作成したアプリでXcode 5を使用していて、作成しただけで実行ボタンを押してクリックすると、プロジェクトがビルドされますが、iOSシミュレーターに表示されず、次のメッセージが表示されます。

 Failed to instantiate the default view controller for UIMainStoryboardFile 'Main' - 
 perhaps the designated entry point is not set?

もちろん、私はそれについてグーグルで調べましたが、誰もがこれが起こっていることを指摘しています。なぜなら、XCodeはどのView Controllerが初期のものかまだわからないからです。しかし、奇妙なことに、私はアプリをページベースのアプリ(シングルビューおよびタブ付きアプリオプションも試してみました)として作成し、XCodeはすでにストーリーボードを定義しています。

また、プロジェクトのメインインターフェースオプションに移動すると、ストーリーボード(Xcode自体で「Main」という名前)が設定され、ストーリーボードで、ビューコントローラーが「初期ビューコントローラー」として設定されます。

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

なにが問題ですか?


プログラムで設定してみてください
Shamsudheen TK 2014

@Ramshadこんにちは、私はiOS開発の初心者です。どうやってやるの?
rodrigoalvesvieira、2014年


2
必ずビューコントローラを初期ビューコントローラに設定してください。
Sandeep

Kashif Ahmedが指摘したように、Info.plistファイルをソースコードとして開き、<key> UISceneStoryboardFile </ key>文字列を編集して、そこに新しいストーリーボードの名前を指定する必要もあります。
ボグダン

回答:


56

これも私にも起こりました。私は50回チェックし、「Is Initial View Controller」がチェックされたと信じています。それは突然起こりました。それで、私はそれをどのように修正しましたか?

  1. プロジェクトに新しいストーリーボードを作成し、Main_iPhoneV2(または元のストーリーボードのスタイルに応じてiPadV2)のような名前を付けます。
  2. 壊れたストーリーボードを開き、白い領域の任意の場所をクリックし、command-a、次にcommand-c(すべてを選択してコピー)を押します。
  3. 新しいストーリーボードを開き、command-vを押して、まったく同じ設定を貼り付けます
  4. プロジェクト設定に移動し、「メインインターフェイス」を新しいMain_iPhoneV2に変更します(iPadでユニバーサルアプリを作成している場合は、-Info.plistを編集して、「メインストーリーボードファイル」の値を探します。ベース名(iPad)
  5. 再コンパイルして、髪の毛を抜くのをやめます

3
開発者の基本に記載されている手順を実行中に同じ問題が発生しました。新しいストーリーボードを作成し、新しいビューボードを初期ビューコントローラーとしてマークし、プロジェクト展開情報を使用して新しいストーリーボードをメインストーリーボードとして設定しました。それは魔法のように働き始めました。Xcodeのバグかどうかはわかりません。developer.apple.com/library/ios/referencelibrary/GettingStarted/...
ioWint

これは機能しませんでした、または最初のナビゲーションコントローラーが「is Inital View Controller」に設定されていない限り、機能しないと思います。
Sumit Kumar Saha

私はこれを試すつもりでした。しかし、それから私は掃除して再構築し、それはうまくいった
Skywalker

305

属性インスペクターで「初期ビューコントローラーです」をチェックします。

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


もちろん、これは「機能する方法」です。しかし、「バグ」にも遭遇したため、これは機能しません。新しいものを作成し、すべてのものをコピーするとうまくいきました!私の場合。
Tys

しかし、彼のビューコントローラーは既に初期ビューコントローラーとして設定されていますね。
Iurii Vasylenko、2015

@YuraVasylenko:以前はそうではなかったので、マークとして選択済みとして示しました。
Ashvin Ajadiya

1
それを必要とする人のためにもう少し詳細にするために、ストーリーボードの初期コントローラーの設定
Sergei Basharov

40

最初に、右側のユーティリティバーのView Controllerをクリックします。次に、Attributes Inspectorを選択し、View Controllerセクションで「Is Initial View Controller」チェックボックスがオンになっていることを確認します


1
これが私の問題でした。ストーリーボードにあったデフォルトのビューコントローラーを削除しました。別のコントローラーを追加したときに、これを確認する必要がありました。
Orgmir 2014

17

この警告は、次のようなコードがある場合にも報告されます。

    window = UIWindow(frame: UIScreen.mainScreen().bounds)
    window?.rootViewController = myAwesomeRootViewController
    window?.makeKeyAndVisible()

この場合、Main Interfaceアプリのストーリーボードエントリは必要ないため、ターゲット設定の最初のページに移動し、空に設定します。


14

Interface Builderの使用:

Is initial view controller」が設定されているか確認してください。以下の手順で設定できます。

  1. ビューコントローラーを選択してください(第一画面として表示される)。
  2. [ ユーティリティ]ウィンドウから[ 属性インスペクタ]を選択します。
  3. ビューコントローラーセクションから[ 初期ビューコントローラーです]を選択します(そうでない場合)。

この手順を実行してもエラーが発生する場合 uncheck and do it again.

問題を解決する手順

プログラムで使用する:

Objective-C:

        self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];
        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];

        UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"HomeViewController"]; // <storyboard id>

        self.window.rootViewController = viewController;
        [self.window makeKeyAndVisible];

        return YES;

スウィフト:

        self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
        let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)

        var objMainViewController: MainViewController = mainStoryboard.instantiateViewControllerWithIdentifier("MainController") as! MainViewController

        self.window?.rootViewController = objMainViewController

        self.window?.makeKeyAndVisible()

        return true

3
プログラムで行う場合は、必ずストーリーボードをターゲットのメインインターフェイスから削除してください。空白のままにしてください。これも入りdidFinishLaunchingWithOptionsます。
ジョーダンH

@JordanHターゲットのメインインターフェイスからストーリーボードを削除する方法
PascalS

@パステキストを選択して[削除]をクリックすると、[全般]タブに表示されます
ジョーダンH

12

黒い画面と一緒にシミュレータにタブバーコントローラが表示されないので、これを経験しました。アプリをシミュレーターに表示するには、次のようにしました。

  1. Main.storyboardに移動します。
  2. Is Initial View Controller[属性インスペクタ]タブの下を確認します。

属性インスペクターの初期ビューコントローラーです。


10

ウィンドウを手動で設定し、

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    if (!application.keyWindow.rootViewController) 
     {
        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];

        UIViewController *myViewController= [storyboard instantiateViewControllerWithIdentifier:@"myViewController identifier"];

         application.keyWindow.rootViewController = myViewController;
     }
}

ストーリーボードの最初のビューコントローラーのチェックを外す必要がありますか?
bdv 2014年

7

私は、ストーリーボードファイル名「に変更するとき、私はこのエラーを取得するMain.storyboard」:「TO XXX.storyboard

私のための解決策は:

  • 製品->クリーン
  • 変更:サポートファイル -> info.plist- > メインストーリーボードファイルのベース名 -> メイン TO:XXX

幸運を



3

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

上記の正解とは別に、一般的に正しいメインインターフェイスを設定していることも確認してください。


3

最初のオプション

デフォルトのビューコントローラの代わりにカスタムストーリーボードを設定する場合。

この属性をinfo.plistファイルから変更します

<key>UISceneStoryboardFile</key> <string>Onboarding</string>

オンボーディングはストーリーボード名になります

これを開くには、info.plistファイルを右クリックし、ソースコードとして開きます

2番目のオプション

1-プロジェクトをクリックします

2-ターゲットセクションからプロジェクトを選択します

3- 展開インターフェイスセクションに移動

4- メインインターフェースフィールドからストーリーボードセクションを変更します

ストーリーボードの初期ビューコントローラを設定してください


1
<key> UISceneStoryboardFile </ key>で修正されました。ありがとう。
ボグダン

2

新しいストーリーボードを追加した場合は、次の点を確認する必要があります。

1)plistファイルで、メインストーリーボードファイルのベース名(iPad)または(iPhone)の値をストーリーボードファイル名と一致させる必要があります(拡張子.storyboardを追加しないでください)。

2)ストーリーボードには、最初のビューコントローラとして設定された1つのビューコントローラが必要です。

3)プロジェクトをクリーンアップしてビルドします。:)

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


1

コードを定期的にソース管理にコミットしている場合は、これにより、新しいストーリーボードを作成する手間が省け、さらに問題が発生する可能性があります...

これは、動作するバージョンのGitソースコードと壊れたバージョンを比較することで解決できました。diffは、最初の行に最初のビューコントローラーのID(私の場合はinitialViewController = "Q7U-eo-vxw")が含まれている必要があることを示していました。ソースコードを検索して、IDが存在することを確認しました。私がしなければならなかったすべてはそれを元に戻し、すべてが再び働いた!

<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="5056" systemVersion="13E28" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" initialViewController="Q7U-eo-vxw">
    <dependencies>
        <deployment defaultVersion="1296" identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3733"/>
    </dependencies>
    <scenes>

トラブルシューティングに役立ついくつかの手順を次に示します。

  1. 失敗したストーリーボードを右クリックし、ソース管理>コミット...を使用して、最後のコミット以降の変更を保存します。
  2. 失敗しているストーリーボードを右クリックし、[Open As> Source Code]を使用してストーリーボードのXMLを表示します。
  3. では、文書の要素、「という名前の属性を探しinitialViewController」。それが欠けていても心配しないでください、私たちはそれを修正します。そこにある場合は、それに割り当てられているIDをダブルクリックし、command-cでコピーし、command-f command-vでドキュメント内のより深い場所で検索します。これは、初期ビューを提供するコントローラーのIDです。ドキュメントで定義されていない場合は問題です。ドキュメントタグから削除する必要があります。私の場合は、initialViewController = "Q7U-eo-vxw"です。
  4. 表示というXcodeメニュー項目に移動し、バージョンエディター>比較表示を表示を選択します。
  5. 左側にローカルバージョン、右側に履歴バージョンが表示されます。このストーリーボードのコミットのリストを取得するには、履歴バージョンの下の日付をクリックしてください。機能していることがわかっているドキュメントを選択し、ドキュメント要素を比較します* initialViewControllerの IDは何ですか?違いますか?その場合は、手動で編集して実行してみてください。 実際のxcode履歴比較ツール

1

AppDelegateにウィンドウ変数があるかどうかを確認します。

var window: UIWindow? 

また、Info.plistファイルのストーリーボードも確認してください。

<key>UIMainStoryboardFile</key>
<string>Main</string>

AppDelegateでrootViewControllerをプログラムで設定しても、警告は修正されません。ストーリーボードでビューコントローラを設定するか、プログラムで行うかを選択する必要があります。


1

Xcode 11以降で作成されたプロジェクトでは、プロジェクト設定からMain Interfaceファイルを変更するだけでは十分ではありません。

Info.plistファイルを手動で編集し、ストーリーボード名も設定する必要がありますUISceneStoryboardFile


0

上記のどれも私のために問題を解決しませんでした。私の場合、正しいアプリケーションシーンマニフェストも設定されていませんでした。

以前はメインであったLoginScreenを変更する必要がありました

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

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