我在一个新创建的应用程序中使用 Xcode,当我运行该项目时,它没有显示在 iOS 模拟器中,并且我收到以下消息:
无法为 UIMainStoryboardFile 'Main' 实例化默认视图控制器 - 也许未设置指定的入口点?
当然,我已经在 Google 上搜索过了,每个人都指出这是因为 Xcode 还不知道哪个视图控制器是最初的视图控制器。但奇怪的是,我将应用程序创建为一个基于页面的应用程序(也尝试了单视图和选项卡式应用程序选项),而 Xcode 已经为它定义了一个 Storyboard。
此外,当我进入项目的主界面选项时,故事板(由 Xcode 本身命名为“Main”)被设置,在故事板中,我的视图控制器被设置为“初始视图控制器”
https://i.stack.imgur.com/EEGEy.png
怎么了?
在属性检查器中检查是初始视图控制器。
https://i.stack.imgur.com/KpJRH.png
所以这也发生在我身上。我检查了 50 次,我的“是初始视图控制器”被检查了,相信我。它突然发生了。那么我是如何解决的呢?
在您的项目中创建一个新的故事板,将其命名为 Main_iPhoneV2(或 iPadV2,具体取决于您的原始故事板样式) 打开损坏的故事板,单击白色区域的任意位置并按 command-a,然后按 command-c(全选并复制)打开您的新故事板并按 command-v 粘贴相同的确切设置转到您的项目设置,将您的“主界面”更改为新的 Main_iPhoneV2(如果它是您的 iPad 并且您正在编写一个通用应用程序,您将不得不编辑 -Info.plist 并查找值“主故事板文件基本名称(iPad)重新编译,并停止拉扯你的头发
首先单击右侧实用工具栏中的视图控制器。接下来选择 Attributes Inspector 并确保在 View Controller 部分下选中了“Is Initial View Controller”复选框!
如果您有以下代码,也会报告此警告:
window = UIWindow(frame: UIScreen.mainScreen().bounds)
window?.rootViewController = myAwesomeRootViewController
window?.makeKeyAndVisible()
在这种情况下,转到 Target > General > Deployment Info
并将 Main Interface
设置为空,因为您的应用程序不需要情节提要条目:
https://i.stack.imgur.com/UQryL.png
我的标签栏控制器没有出现在模拟器中并出现黑屏时,我遇到了这种情况。为了让我的应用程序出现在模拟器中,我执行了以下操作。
转到 Main.storyboard。检查属性检查器选项卡下的是初始视图控制器。
https://i.stack.imgur.com/YW5r5.png
如果您不小心删除了该视图控制器,或者以其他方式使其不是默认值,那么您将看到错误“无法为 UIMainStoryboardFile 'Main' 实例化默认视图控制器 - 可能未设置指定的入口点?”当您的应用程序启动时,以及纯黑屏。
要解决此问题,请打开 Main.storyboard 文件并找到您希望在应用首次运行时显示的视图控制器。选中后,转到属性检查器并选中标记为“Is Initial View Controller”的框。您应该会看到该视图控制器左侧出现一个向右箭头,表明它是您的故事板的入口点。
使用界面生成器:
检查是否设置了“是初始视图控制器”。您可以使用以下步骤进行设置:
选择您的视图控制器(将显示为初始屏幕)。从实用程序窗口中选择属性检查器。从视图控制器部分选择“是初始视图控制器”(如果不是)。
如果您已完成此步骤但仍然出现错误,则 uncheck and do it again.
https://i.stack.imgur.com/oFNwz.png
以编程方式使用:
目标-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
didFinishLaunchingWithOptions
中。
手动设置窗口,
- (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;
}
}
以上都没有为我解决这个问题。在我的情况下,它也没有设置正确的应用程序场景清单。
我不得不将 LoginScreen 更改为 Main
https://i.stack.imgur.com/Wq7fx.png
当我将故事板文件名“Main.storyboard”更改为:“XXX.storyboard”时出现此错误
我的解决方案是:
产品->清洁
更改:支持文件 -> info.plist -> 主故事板文件基本名称 -> 主 TO:XXX
祝你好运
产品“清洁”是我的解决方案。
https://i.stack.imgur.com/gOcnH.png
除了上述正确答案外,还要确保您设置了正确的一般主界面。
第一个选项
如果您想设置自定义故事板而不是默认视图控制器。
从 info.plist 文件更改此属性
<key>UISceneStoryboardFile</key> <string>Onboarding</string>
入职将是您的故事板名称
打开此右键单击 info.plist 文件并作为源代码打开
第二个选项
1-单击您的项目
2-从目标部分中选择您的项目
3-移动到部署界面部分
4-从主界面字段更改您的故事板部分
请记住设置你的故事板初始视图控制器
在 Xcode 11 及更高版本中创建的项目,仅从项目设置中更改主界面文件是不够的。
您还必须手动编辑 Info.plist 文件并为 UISceneStoryboardFile
设置情节提要名称。
如果您添加了新的故事板,那么您必须检查以下几点:
在您的 plist 文件中,主故事板文件基本名称 (iPad) 或 (iPhone) 的检查值应与您的故事板文件名匹配(不要添加扩展名 .storyboard) 在故事板中应该有一个视图控制器设置为初始视图控制器清理并构建您的项目。 :)
https://i.stack.imgur.com/gPFco.png
如果您一直在定期将代码提交到源代码管理,这可能会为您省去创建新 Storyboard 并可能引入更多问题的麻烦......
我能够通过比较版本的 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>
以下是一些可以帮助您排除故障的步骤:
右键单击失败的 Storyboard 并使用 Source Control > Commit... 保留自上次提交以来的更改。尝试右键单击失败的情节提要并使用“打开方式 > 源代码”查看情节提要的 XML。在文档元素中,查找名为“initialViewController”的属性。如果它丢失了,请不要担心,我们会修复它。如果它在那里,双击分配给它的 id,command-c 复制它,command-f command-v 在文档中更深地搜索它。这是应该提供初始视图的控制器的标识符。如果它没有在文档中定义,那么这就是一个问题——你应该从文档标签中删除它,在我的例子中是 initialViewController="Q7U-eo-vxw"。转到名为 View 的 Xcode 菜单项并选择 Version Editor > Show Comparison View 这会在左侧显示您的本地版本,在右侧显示历史版本。单击历史版本下方的日期以获取此故事板的提交列表。选择一个你知道有效的并比较文档元素。 *initialViewController 的 id 是什么?有什么不同吗?如果是这样,请尝试手动编辑它并运行。
检查 AppDelegate 中是否有窗口变量。
var window: UIWindow?
并检查 Info.plist 文件的情节提要。
<key>UIMainStoryboardFile</key>
<string>Main</string>
以编程方式在 AppDelegate 中设置 rootViewController 不会修复警告。您应该选择是让情节提要设置视图控制器还是以编程方式进行。
如果你有场景委托,你必须检查 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”的新故事板,则会出现一些问题,但很容易调整......
因此,在您创建了一个具有所需名称的新故事板并希望将其用作主要故事之后,请执行以下操作:
属性检查器中的复选框“是初始视图控制器”:选择所需的故事板作为目标的“主界面”:打开项目 Info.plist 并找到一个属性“故事板名称”,您应该在其中键入所需的故事板名称作为值