iOS 7-无法实例化默认视图控制器


93

我在一个新创建的应用程序中使用Xcode 5,当我刚创建它时,我点击运行按钮,然后建立了项目,但它未在iOS Simulator中显示,并且收到以下消息:

 Failed to instantiate the default view controller for UIMainStoryboardFile 'Main' - 
 perhaps the designated entry point is not set?

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

另外,当我转到项目的主界面选项时,将设置情节提要(由Xcode本身命名为“ Main”),并在情节提要中将我的视图控制器设置为“初始视图控制器”。

在此处输入图片说明

怎么了?


尝试以编程方式进行设置...
Shamsudheen TK

@Ramshad嗨,我是iOS开发的新手。我怎样才能做到这一点?
rodrigoalvesvieira 2014年


2
确保将视图控制器设置为初始视图控制器。
Sandeep

正如Kashif Ahmed指出的那样,您还需要打开Info.plist文件作为源代码,并编辑<key> UISceneStoryboardFile </ key>字符串,并在其中提供新故事板的名称。
博格丹

Answers:


56

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

  1. 在您的项目中创建一个新的Storyboard,将其命名为Main_iPhoneV2(或iPadV2,具体取决于您的原始Storyboard样式)
  2. 打开损坏的情节提要,单击白色区域中的任意位置,然后按Command-a,然后按Command-c(全选并复制)
  3. 打开新的故事板,然后按Command-v粘贴相同的设置
  4. 转到项目设置,将“主界面”更改为新的Main_iPhoneV2(如果是iPad,并且您正在编写通用应用程序,则必须编辑-Info.plist并查找值“ Main storyboard file”基本名称(iPad)
  5. 重新编译,然后停止将头发拉出

3
在尝试开发人员基础中列出的步骤时遇到了相同的问题。创建了一个新的Storyboard,将新的Storyboard标记为初始视图控制器,并通过Projects Deployment Info将新的Storyboard设置为Main story board。它神奇地开始工作。不确定Xcode是否存在某些错误。developer.apple.com/library/ios/referencelibrary/GettingStarted/...
ioWint

除非并且直到将初始导航控制器设置为“是Inital View控制器”,否则此方法不起作用或我认为将不起作用。
Sumit Kumar Saha

我正要尝试这个。但是后来我又打扫干净并盖好了它,就行了
天行者

305

在“属性”检查器中检查“ 是否为初始视图控制器 ”。

在此处输入图片说明


当然,这就是“它应该工作的方式”。但是我也遇到了“错误”,然后这是行不通的。创建一个新的文件,然后复制所有内容,就可以了!就我而言。
Tys 2014年

但是他的视图控制器已经设置为“初始视图控制器”,不是吗?
Iurii Vasylenko 2015年

@YuraVasylenko:它不是以前的,所以我已用标记表示已选中。
Ashvin Ajadiya

1
只是为需要它的用户提供了一些更详细的信息,为情节提要设置了初始控制器
Sergei Basharov

40

首先单击右侧实用程序栏中的View Controller 。接下来,选择“ 属性”检查器,并确保在“视图控制器”部分下,选中“是初始视图控制器”复选框!


1
这是我的问题。我删除了我的情节提要所拥有的默认视图控制器,当我添加另一个时必须检查它。
Orgmir 2014年

17

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

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

在这种情况下,请转到目标设置的第一页并将其设置Main Interface为空,因为您的应用不需要情节提要条目。


14

使用Interface Builder:

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

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

如果您已完成此步骤,但仍然出现错误,则 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

3
如果您以编程方式进行操作,请确保从目标的主界面中删除情节提要-只需将其留空即可。这也应该进去didFinishLaunchingWithOptions
乔丹H

@JordanH如何从目标主界面中删除情节提要?
PascalS

@Passe选择文本并单击删除,它在“常规”选项卡中
Jordan H

12

我的Tab Bar控制器没有出现在模拟器中,而且黑屏时也遇到了这种情况。为了使我的应用程序出现在模拟器中,我执行了以下操作。

  1. 转到Main.storyboard。
  2. 检查“ Is Initial View Controller属性”检查器选项卡下的。

是“属性”检查器中的“初始视图控制器”。


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

这是否需要取消选中情节提要中的初始ViewController?
bdv 2014年

7

当我改变了故事板文件名为“我得到这个错误Main.storyboard ” TO:“ XXX.storyboard

我的解决方案是:

  • 产品->清洁
  • 更改:支持文件 -> info.plist- > 主故事板文件的基本名称 -> TO:XXX

祝好运



3

在此处输入图片说明

除了上述正确答案外,还请确保您总体上设置了正确的主界面。


3

第一种选择

如果要设置自定义情节提要而不是默认视图控制器。

从info.plist文件更改此属性

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

入职将是您的故事板名称

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

第二选择

1-点击您的项目

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

3-移至部署界面部分

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

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


1
<key> UISceneStoryboardFile </ key>东西为我修复了它。谢谢。
博格丹,

2

如果添加了新的故事板,则必须检查以下几点。

1)在您的plist文件中,“ 主要情节提要”文件基本名称(iPad)或(iPhone)的检查值应与您的情节提要文件名匹配(不要添加扩展名.storyboard

2)在情节提要中应该有一个视图控制器,将其设置为“初始视图控制器”

3)清理并构建您的项目。:)

在此处输入图片说明


1

如果您一直在定期将代码提交给源代码管理,则可以避免创建新的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>

以下是一些可以帮助您进行故障排除的步骤:

  1. 右键单击失败的情节提要,然后使用“源代码管理”>“提交...”保留自上次提交以来所做的更改。
  2. 尝试右键单击失败的情节提要,然后使用“打开方式>源代码”查看情节提要的XML。
  3. document元素中,查找名为“ initialViewController ” 的属性。如果丢失了,请放心,我们将修复该问题。如果存在,请双击分配给它的ID,然后按Command-c复制它,然后按Command-F Command-v在文档中更深入地搜索它。这是应该提供初始视图的控制器的标识符。如果未在文档中定义它,那么这将是一个问题-您应该将其从document标签中删除,在我的情况下为initialViewController =“ Q7U-eo-vxw”
  4. 转到名为“视图”的Xcode菜单项,然后选择“版本编辑器”>“显示比较视图”
  5. 这在左侧显示您的本地版本,在右侧显示历史版本。单击历史版本下方的日期以获取此故事板的提交列表。选择一个您知道有效的方法,然后比较文档元素。* initialViewController的ID是什么?不一样吗 如果是这样,请尝试手动重新编辑并运行。 使用中的xcode历史比较工具

1

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

var window: UIWindow? 

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

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

以编程方式在AppDelegate中设置rootViewController不会解决该警告。您应该选择让故事板设置视图控制器还是以编程方式进行操作。


1

用Xcode 11及更高版本创建的项目,仅从项目设置中更改Main Interface文件是不够的。

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


1

以上都不是我解决的问题。就我而言,这还没有设置正确的应用程序场景清单。

我不得不将LoginScreen更改为Main

在此处输入图片说明


感到惊讶的是,该票得不到多少。实际上,这将在任何SceneDelegate实现中发生(不使用Storyboard作为初始控制器)。
bauerMusic
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.