我在一个新创建的应用程序中使用Xcode 5,当我刚创建它时,我去运行按钮e点击它,然后项目构建但它没有显示在iOS模拟器中我收到以下消息:
Failed to instantiate the default view controller for UIMainStoryboardFile 'Main' -
perhaps the designated entry point is not set?
我当然用Google搜索了它,并且每个人都指出这种情况正在发生,因为XCode还不知道哪个视图控制器是最初的控制器。但奇怪的是,我创建了一个基于页面的应用程序(也尝试过单视图和选项卡式应用程序选项)应用程序,XCode已经为它定义了一个故事板。
此外,当我转到项目的主界面选项时,设置了故事板(由Xcode本身命名为“Main”),在Storyboard中,我的视图控制器被设置为“初始视图控制器”
有什么问题?
答案 0 :(得分:298)
在属性检查器中检查是初始视图控制器。
答案 1 :(得分:52)
所以这也发生在我身上。我检查了50次并检查了我的“初始视图控制器”,相信我。它突然发生了。那怎么解决呢?
答案 2 :(得分:39)
首先单击右侧实用程序栏中的View Controller。接下来选择属性检查器,并确保在View Controller部分下选中'是初始视图控制器复选框!
答案 3 :(得分:14)
使用Interface Builder:
检查是否设置了'是初始视图控制器'。您可以使用以下步骤进行设置:
如果您已完成此步骤但仍然出现错误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;
Swift:
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
答案 4 :(得分:12)
如果您有以下代码,也会报告此警告:
window = UIWindow(frame: UIScreen.mainScreen().bounds)
window?.rootViewController = myAwesomeRootViewController
window?.makeKeyAndVisible()
在这种情况下,请转到目标设置的第一页,并将Main Interface
设置为空,因为您不需要为您的应用设置故事板条目。
答案 5 :(得分: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;
}
}
答案 6 :(得分:8)
我遇到过这种情况,我的标签栏控制器没有出现在模拟器中,还有黑屏。为了让我的应用程序出现在模拟器中,我执行了以下操作。
答案 7 :(得分:5)
我更改故事板文件名时出现此错误&#34; Main.storyboard &#34; TO:&#34; XXX.storyboard &#34;
我的解决方案是:
祝你好运
答案 8 :(得分:3)
产品&#34;清洁&#34;对我来说是解决方案。
答案 9 :(得分:3)
答案 10 :(得分:2)
如果你添加了新故事板,那么你必须检查以下几点。
1)在plist文件中, 主故事板文件基本名称 (iPad)或(iPhone)的检查值应与故事板文件名匹配(不要添加扩展程序 .storyboard )
2)在故事板中应该有一个视图控制器设置为 是初始视图控制器
3)清理并构建项目。 :)
答案 11 :(得分:2)
答案 12 :(得分:1)
如果您定期将代码提交给源代码控制,这可以省去创建新故事板的麻烦,并可能引入更多问题......
我能够通过比较与破坏版本相对应的版本的Git源代码来解决这个问题。差异显示第一行应该包含初始视图控制器的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>
以下是一些可以帮助您排查问题的步骤:
答案 13 :(得分:1)
第一个选项
如果要设置自定义情节提要而不是默认的视图控制器。
从info.plist文件中更改此属性
<key>UISceneStoryboardFile</key>
<string>Onboarding</string>
入职将是您的故事板名称
打开此右键单击info.plist文件并作为源代码打开
第二个选项
1-单击您的项目
2-从目标部分中选择您的项目
3-转到部署界面部分
4-在主界面字段
中更改情节提要部分请记住设置您的情节提要初始视图控制器
答案 14 :(得分:0)
检查AppDelegate中是否有窗口变量。
var window: UIWindow?
还要检查Info.plist文件的故事板。
<key>UIMainStoryboardFile</key>
<string>Main</string>
以编程方式在AppDelegate中设置rootViewController不会修复警告。您应该选择是否让故事板设置视图控制器或以编程方式执行。
答案 15 :(得分:0)
使用Xcode 11及更高版本创建的项目,仅通过项目设置更改主界面文件是不够的。
您必须手动编辑Info.plist文件并为UISceneStoryboardFile
设置情节提要名称。
答案 16 :(得分:0)
如果你有场景委托,你必须检查 info.plist
<key>UIApplicationSceneManifest</key>
<dict>
<key>UIApplicationSupportsMultipleScenes</key>
<false/>
<key>UISceneConfigurations</key>
<dict>
<key>UIWindowSceneSessionRoleApplication</key>
<array>
<dict>
<key>UISceneConfigurationName</key>
<string>Default Configuration</string>
<key>UISceneDelegateClassName</key>
<string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>
<key>UISceneStoryboardFile</key>
<string>Login</string>
</dict>
</array>
</dict>
</dict>
我正在加载我的故事板,名为 Login.storyboard