![](/img/trans.png)
[英]Failed to instantiate the default view controller for UIMainStoryboardFile 'Main' - perhaps the designated entry point is not set?
[英]Failed to instantiate the default view controller for UIMainStoryboardFile 'Main' - perhaps the designated entry point is not set?
我在新创建的应用程序中使用 Xcode,当我运行该项目时,它没有显示在 iOS 模拟器中,我收到以下消息:
未能为 UIMainStoryboardFile 'Main' 实例化默认视图 controller - 也许未设置指定的入口点?
当然,我用谷歌搜索了一下,每个人都指出这是因为 Xcode 还不知道哪个视图 controller 是初始视图。 但奇怪的是,我将应用程序创建为基于页面的应用程序(也尝试了单视图和选项卡式应用程序选项)应用程序和 Xcode 已经为它定义了一个 Storyboard。
此外,当我将 go 设置为项目的主界面选项时,设置了 storyboard(由 Xcode 本身命名为“Main”),并且在 Storyboard 中,我的视图 controller 被设置为“初始视图控制器”
怎么了?
在属性检查器中检查是初始视图控制器。
所以这也发生在我身上。 我检查了 50 次并且检查了我的“是初始视图控制器”,相信我。 它突然发生了。 那我是怎么修复的呢?
首先单击右侧实用工具栏中的视图控制器。 接下来选择Attributes Inspector并确保在 View Controller 部分下选中了“Is Initial View Controller”复选框!
如果您有以下代码,也会报告此警告:
window = UIWindow(frame: UIScreen.mainScreen().bounds)
window?.rootViewController = myAwesomeRootViewController
window?.makeKeyAndVisible()
在这种情况下,转到目标设置的第一页并将Main Interface
设置为空,因为您的应用程序不需要故事板条目。
我的 Tab Bar Controller 没有出现在模拟器中并出现黑屏时,我遇到过这种情况。 为了让我的应用程序出现在模拟器中,我执行了以下操作。
Is Initial View Controller
。如果您不小心删除了该视图控制器,或者以其他方式将其设为默认值,那么您将看到错误“无法实例化 UIMainStoryboardFile 'Main' 的默认视图控制器 - 可能未设置指定的入口点?” 当您的应用程序启动时,伴随着纯黑的屏幕。
要解决这个问题,打开你的 Main.storyboard 文件,找到你想在你的应用程序第一次运行时显示的视图控制器。 选中后,转到属性检查器并选中标记为“是初始视图控制器”的框。 您应该会看到一个向右的箭头出现在该视图控制器的左侧,表明它是故事板的入口点。
使用界面生成器:
检查是否设置了“是初始视图控制器”。 您可以使用以下步骤进行设置:
如果您已完成此步骤但仍出现错误uncheck and do it again.
以编程方式使用:
目标-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
手动设置窗口,
- (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 ”更改为:“ XXX.storyboard ”时出现此错误
我的解决方案是:
祝你好运
产品“清洁”是我的解决方案。
第一个选项
如果您想设置自定义故事板而不是默认视图控制器。
从 info.plist 文件更改此属性
<key>UISceneStoryboardFile</key> <string>Onboarding</string>
入职将是您的故事板名称
打开这个右键单击 info.plist 文件并作为源代码打开
第二个选项
1- 单击您的项目
2- 从目标部分选择您的项目
3- 移至部署界面部分
4- 从主界面字段更改您的故事板部分
请记住设置您的故事板初始视图控制器
如果您一直定期将代码提交到源代码管理,这可能会为您省去创建新故事板的麻烦,并可能会引入更多问题......
我能够通过比较与损坏版本工作的版本的 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>
以下是一些可以帮助您排除故障的步骤:
检查 AppDelegate 中是否有窗口变量。
var window: UIWindow?
还要检查您的 Info.plist 文件的故事板。
<key>UIMainStoryboardFile</key>
<string>Main</string>
在 AppDelegate 中以编程方式设置 rootViewController 不会修复警告。 您应该选择是让故事板设置视图控制器还是以编程方式进行。
在 Xcode 11 及更高版本中创建的项目,仅从项目设置更改主界面文件是不够的。
您必须手动编辑 Info.plist 文件并为UISceneStoryboardFile
设置故事板名称。
如果您不使用 storyboard
打开info.plist 在info.plist文件中删除如下特征 Information Property List -> Scene configuration -> Application Session Role -> Item 0 -> StoryBoard Name
如果你有场景委托,你必须检查 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 的故事板
如果您创建了一个名称不是“Main”的新故事板,则会出现一些问题,但很容易调整......
因此,在您创建了一个具有所需名称的新故事板并希望将其用作主要故事之后,请执行以下操作:
在 XCode 14.0.1 中对我有用的是,除了设置初始视图 controller 之外,还更新了构建设置:“UIKIT Main Storyboard File Base Name”为新名称 storyboard
对于未来的读者:- iOS 13、Swift 5
我从SceneDelegate以编程方式设置了初始视图 controller,我得到了这个作为警告并且视图 controller 设置完美。 所以我从Info.plist 中删除了 Storyboard Name并且警告永远消失了。
info.plist > Application Scene Manifest > Scene Configuration > Application Session Role > Storyboard Name > 删除这个
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.