ChatGPT解决这个技术问题 Extra ChatGPT

无法为 UIMainStoryboardFile 'Main' 实例化默认视图控制器 - 也许未设置指定的入口点?

我在一个新创建的应用程序中使用 Xcode,当我运行该项目时,它没有显示在 iOS 模拟器中,并且我收到以下消息:

无法为 UIMainStoryboardFile 'Main' 实例化默认视图控制器 - 也许未设置指定的入口点?

当然,我已经在 Google 上搜索过了,每个人都指出这是因为 Xcode 还不知道哪个视图控制器是最初的视图控制器。但奇怪的是,我将应用程序创建为一个基于页面的应用程序(也尝试了单视图和选项卡式应用程序选项),而 Xcode 已经为它定义了一个 Storyboard。

此外,当我进入项目的主界面选项时,故事板(由 Xcode 本身命名为“Main”)被设置,在故事板中,我的视图控制器被设置为“初始视图控制器”

https://i.stack.imgur.com/EEGEy.png

怎么了?

尝试以编程方式设置它...
@Ramshad嗨,我是iOS开发的新手。我怎样才能做到这一点?
确保将视图控制器设置为初始视图控制器。
正如 Kashif Ahmed 指出的那样,您还需要将 Info.plist 文件作为源代码打开并编辑 UISceneStoryboardFile 字符串并在其中提供新故事板的名称。

S
Suragch

在属性检查器中检查是初始视图控制器。

https://i.stack.imgur.com/KpJRH.png


当然,这是“它应该工作的方式”。但是我也遇到了“错误”,然后这不起作用。创建一个新的,并复制你所有的东西确实有效!就我而言。
但是他的视图控制器已经设置为初始视图控制器,不是吗?
@YuraVasylenko:它不是以前的,所以我用标记表示已选中。
只是为了让需要它的人更详细一点,Setting the Initial Controller for a Storyboard
R
Ryna

所以这也发生在我身上。我检查了 50 次,我的“是初始视图控制器”被检查了,相信我。它突然发生了。那么我是如何解决的呢?

在您的项目中创建一个新的故事板,将其命名为 Main_iPhoneV2(或 iPadV2,具体取决于您的原始故事板样式) 打开损坏的故事板,单击白色区域的任意位置并按 command-a,然后按 command-c(全选并复制)打开您的新故事板并按 command-v 粘贴相同的确切设置转到您的项目设置,将您的“主界面”更改为新的 Main_iPhoneV2(如果它是您的 iPad 并且您正在编写一个通用应用程序,您将不得不编辑 -Info.plist 并查找值“主故事板文件基本名称(iPad)重新编译,并停止拉扯你的头发


在尝试开发人员基础中列出的步骤时遇到了同样的问题。创建了一个新的故事板,将新的故事板标记为初始视图控制器,并通过项目部署信息将新的故事板设置为主故事板。它神奇地开始起作用。不确定它是否与 Xcode 有一些错误。 developer.apple.com/library/ios/referencelibrary/GettingStarted/…
这不起作用或我相信不会起作用,除非并且直到初始导航控制器设置为“是初始视图控制器”。
我打算试试这个。但后来我清理并再次建造,它奏效了
A
Andrew

首先单击右侧实用工具栏中的视图控制器。接下来选择 Attributes Inspector 并确保在 View Controller 部分下选中了“Is Initial View Controller”复选框!


这是我的问题。我删除了我的故事板具有的默认视图控制器,当我添加另一个时必须检查这一点。
p
pkamb

如果您有以下代码,也会报告此警告:

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

在这种情况下,转到 Target > General > Deployment Info 并将 Main Interface 设置为空,因为您的应用程序不需要情节提要条目:

https://i.stack.imgur.com/UQryL.png


m
mithun koroth

我的标签栏控制器没有出现在模拟器中并出现黑屏时,我遇到了这种情况。为了让我的应用程序出现在模拟器中,我执行了以下操作。

转到 Main.storyboard。检查属性检查器选项卡下的是初始视图控制器。

https://i.stack.imgur.com/YW5r5.png

如果您不小心删除了该视图控制器,或者以其他方式使其不是默认值,那么您将看到错误“无法为 UIMainStoryboardFile 'Main' 实例化默认视图控制器 - 可能未设置指定的入口点?”当您的应用程序启动时,以及纯黑屏。

要解决此问题,请打开 Main.storyboard 文件并找到您希望在应用首次运行时显示的视图控制器。选中后,转到属性检查器并选中标记为“Is Initial View Controller”的框。您应该会看到该视图控制器左侧出现一个向右箭头,表明它是您的故事板的入口点。


J
Jayprakash Dubey

使用界面生成器:

检查是否设置了“是初始视图控制器”。您可以使用以下步骤进行设置:

选择您的视图控制器(将显示为初始屏幕)。从实用程序窗口中选择属性检查器。从视图控制器部分选择“是初始视图控制器”(如果不是)。

如果您已完成此步骤但仍然出现错误,则 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 中。
@JordanH 如何从目标主界面中删除情节提要?
@Passe 选择文本并点击删除,它在常规选项卡中
S
Shamsudheen TK

手动设置窗口,

- (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;
     }
}

这是否需要取消选中情节提要中的初始视图控制器?
J
Julian Silvestri

以上都没有为我解决这个问题。在我的情况下,它也没有设置正确的应用程序场景清单。

我不得不将 LoginScreen 更改为 Main

https://i.stack.imgur.com/Wq7fx.png


令人惊讶的是,这没有得到那么多的选票。这将发生在几乎任何 SceneDelegate 实现中(不使用 Storyboard 作为初始控制器)。
H
Hovanes Mosoyan

当我将故事板文件名“Main.storyboard”更改为:“XXX.storyboard”时出现此错误

我的解决方案是:

产品->清洁

更改:支持文件 -> info.plist -> 主故事板文件基本名称 -> 主 TO:XXX

祝你好运


W
Walter Schurter

产品“清洁”是我的解决方案。


N
Naren

https://i.stack.imgur.com/gOcnH.png

除了上述正确答案外,还要确保您设置了正确的一般主界面。


K
Kashif Ahmed

第一个选项

如果您想设置自定义故事板而不是默认视图控制器。

从 info.plist 文件更改此属性

<key>UISceneStoryboardFile</key> <string>Onboarding</string>

入职将是您的故事板名称

打开此右键单击 info.plist 文件并作为源代码打开

第二个选项

1-单击您的项目

2-从目标部分中选择您的项目

3-移动到部署界面部分

4-从主界面字段更改您的故事板部分

请记住设置你的故事板初始视图控制器


UISceneStoryboardFile 东西为我修复了它。谢谢。
I
Isuru

在 Xcode 11 及更高版本中创建的项目,仅从项目设置中更改主界面文件是不够的。

您还必须手动编辑 Info.plist 文件并为 UISceneStoryboardFile 设置情节提要名称。


p
pkamb

如果您添加了新的故事板,那么您必须检查以下几点:

在您的 plist 文件中,主故事板文件基本名称 (iPad) 或 (iPhone) 的检查值应与您的故事板文件名匹配(不要添加扩展名 .storyboard) 在故事板中应该有一个视图控制器设置为初始视图控制器清理并构建您的项目。 :)

https://i.stack.imgur.com/gPFco.png


n
neoscribe

如果您一直在定期将代码提交到源代码管理,这可能会为您省去创建新 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 是什么?有什么不同吗?如果是这样,请尝试手动编辑它并运行。


r
rockdaswift

检查 AppDelegate 中是否有窗口变量。

var window: UIWindow? 

并检查 Info.plist 文件的情节提要。

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

以编程方式在 AppDelegate 中设置 rootViewController 不会修复警告。您应该选择是让情节提要设置视图控制器还是以编程方式进行。


M
Mohammed Ramshad .k

如果你有场景委托,你必须检查 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 的故事板

plist


B
BlueDev

如果您创建了一个名称不是“Main”的新故事板,则会出现一些问题,但很容易调整......

因此,在您创建了一个具有所需名称的新故事板并希望将其用作主要故事之后,请执行以下操作:

属性检查器中的复选框“是初始视图控制器”:选择所需的故事板作为目标的“主界面”:打开项目 Info.plist 并找到一个属性“故事板名称”,您应该在其中键入所需的故事板名称作为值