新しく作成したアプリで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」として設定されます
なにが問題ですか?
それでこれも私にも起こりました。私は50回チェックし、「Is Initial View Controller」がチェックされました、信じてください。それは突然起こった。では、どうすれば修正できましたか?
[属性インスペクター]でIs Initial View Controllerを確認します。
まず、右側のView Controllerをクリックしますtilities bar。次にAttributes Inspectorを選択し、View Controllerセクションで'Is Initial View Controller'チェックボックスがオンになっていることを確認します!
Interface Builderの使用:
「Issual View Controller」が設定されているかどうかを確認します。以下の手順を使用して設定できます。
この手順を実行してもエラーが発生する場合は、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
この警告は、次のようなコードがある場合にも報告されます。
window = UIWindow(frame: UIScreen.mainScreen().bounds)
window?.rootViewController = myAwesomeRootViewController
window?.makeKeyAndVisible()
この場合、アプリのストーリーボードエントリは必要ないため、ターゲット設定の最初のページに移動し、Main Interface
を空に設定します。
ウィンドウを手動で設定し、
- (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;
}
}
ストーリーボードのファイル名を変更すると、このエラーが発生します "Main.storyboard" TO: "XXX.storyboard"
私にとっての解決策は:
がんばろう
製品「クリーン」は私にとっての解決策でした。
コードを定期的にソース管理にコミットしている場合、これにより新しいストーリーボードを作成し、場合によってはより多くの問題を導入する手間を省くことができます...
壊れたバージョンと動作するバージョンの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>
トラブルシューティングに役立ついくつかの手順を次に示します:
AppDelegateにウィンドウ変数があるかどうかを確認します。
var window: UIWindow?
また、Info.plistファイルのストーリーボードも確認してください。
<key>UIMainStoryboardFile</key>
<string>Main</string>
AppDelegateでrootViewControllerをプログラムで設定しても、警告は修正されません。ストーリーボードにView Controllerを設定させるか、プログラムで設定するかを選択する必要があります。