web-dev-qa-db-ja.com

iOS 7-デフォルトのView Controllerのインスタンス化に失敗する

新しく作成したアプリで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自体によって「メイン」という名前)が設定され、ストーリーボードでは、View Controllerが「Initial View Controller」として設定されます

enter image description here

なにが問題ですか?

88
rodrigoalves

それでこれも私にも起こりました。私は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. 再コンパイルして、髪の毛を抜かない
52
Ryna

[属性インスペクター]でIs Initial View Controllerを確認します。

enter image description here

298
Ashvin Ajadiya

まず、右側のView Controllerをクリックしますtilities bar。次にAttributes Inspectorを選択し、View Controllerセクションで'Is Initial View Controller'チェックボックスがオンになっていることを確認します!

39
Andy

Interface Builderの使用:

Issual View Controller」が設定されているかどうかを確認します。以下の手順を使用して設定できます。

  1. View Controller(初期画面として表示される)を選択します。
  2. UtilitiesウィンドウからAttribute inspectorを選択します。
  3. View Controller」セクションから「Is Initial View Controller」を選択します(そうでない場合)。

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

Steps to solve problem

プログラムによる使用:

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
14

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

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

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

13
superarts.org

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

- (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;
     }
}
10
Shamsudheen TK

これは、Tab Bar Controllerがシミュレータに黒い画面とともに表示されないことで発生しました。アプリをシミュレーターに表示するために、次のことを行いました。

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

Is Initial View Controller in the Attributes Inspector.

8
Cons Bulaquena

ストーリーボードのファイル名を変更すると、このエラーが発生します "Main.storyboard" TO: "XXX.storyboard"

私にとっての解決策は:

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

がんばろう

5
Hovanes Mosoyan

enter image description here

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

3
Naren

製品「クリーン」は私にとっての解決策でした。

3
Walter Schurter

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

1)plistファイルで、メインストーリーボードファイルのベース名の値を確認します(iPad)または(iPhone)はストーリーボードのファイル名(拡張子を追加しない。storyboard

2)ストーリーボードには、最初のView Controllerですとして設定するView Controllerが1つ必要です

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

enter image description here

2
Sachin Nikumbh

コードを定期的にソース管理にコミットしている場合、これにより新しいストーリーボードを作成し、場合によってはより多くの問題を導入する手間を省くことができます...

壊れたバージョンと動作するバージョンのGitソースコードを比較することで、これを解決できました。 diffは、最初の行に初期View Controllerの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. 失敗したストーリーボードを右クリックし、「名前を付けて開く>ソースコード」を使用して、ストーリーボードのXMLを表示してみてください。
  3. document要素で、「initialViewController」という名前の属性を探します。欠落していても心配しないでください。修正します。そこにある場合は、それに割り当てられているIDをダブルクリックし、command-cでコピーし、command-f command-vでドキュメント内でさらに検索します。これは、初期ビューを提供するコントローラーの識別子です。それがドキュメントで定義されていない場合、それは問題です-私の場合、ドキュメントタグから削除する必要がありますinitialViewController = "Q7U-eo-vxw"
  4. [表示]というXcodeメニュー項目に移動し、[バージョンエディター]> [比較ビューを表示]を選択します。
  5. これにより、左側にローカルバージョンが、右側に履歴バージョンが表示されます。履歴バージョンの下の日付をクリックして、このストーリーボードのコミットのリストを取得します。動作していることがわかっているものを選択し、document要素を比較します。 * initialViewControllerのidは何ですか?違うの?その場合は、手動で編集して実行してみてください。 xcode historical compare tool in action
1
neoscribe

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

var window: UIWindow? 

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

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

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

0
rockdaswift