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

我在一个新创build的应用程序中使用Xcode 5,当我创build它时,我去运行buttone点击它,然后项目build成,但它不显示在iOS模拟器,我得到以下消息:

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

当然,我已经使用了Google,所有人都指出这是因为XCode还不知道哪个视图控制器是最初的视图控制器。 但奇怪的是,我创build了应用程序作为基于页面(也尝试单视图和标签应用程序选项)的应用程序和XCode已经定义了一个故事板为它。

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

在这里输入图像描述

哪里不对?

所以这也发生在我身上。 我检查了50次,我的“是初始视图控制器”被检查,相信我。 它发生在蓝色之外。 那我是怎么修好的?

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

检查属性检查器中的初始视图控制器

在这里输入图像描述

首先点击右侧“ 实用工具”栏中的“视图控制器”。 接下来select属性检查器 ,并确保在视图控制器部分的“是初始视图控制器”checkbox被选中!

使用Interface Builder:

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

  1. select您的视图控制器 (这是作为初始屏幕出现)。
  2. Utilities窗口中selectAttribute inspector
  3. 视图控制器部分select“ 是初始视图控制器 ”(如果没有)。

如果您已经完成了这一步,仍然出现错误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 

手动设置窗口,

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

如果您有一些代码,也会报告此警告:

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

在这种情况下,转到目标设置的第一页,并将Main Interface设置为空,因为您不需要应用程序的故事板条目。

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

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

我的解决scheme是:

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

祝你好运

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

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

2)在故事板中应该有一个视图控制器设置为初始视图控制器

3)清理和build立你的项目。 🙂

在这里输入图像描述

在这里输入图像描述

除了上面正确的答案之外,还要确保你已经设置了正确的主界面。

如果您定期将代码提交给源代码pipe理,这可能为您节省创build新的故事板的麻烦,并可能引入更多问题。

我能够通过比较破坏版本的Git源代码来解决这个问题。 差异显示第一行应该包含初始视图控制器的Id,在我的情况下, initialViewController =“Q7U-eo-vxw” 。 我通过源代码search,以确保该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. 右键单击失败的Storyboard并使用源代码pipe理>提交…保留自上次提交以来所做的更改。
  2. 尝试右击失败的Storyboard并使用“Open As> Source Code”查看故事板的XML。
  3. 文档元素中,查找名为“ initialViewController ”的属性。 如果丢失了,别担心,我们会解决的。 如果它在那里,双击分配给它的id,command-c复制它,command -f command -v在文档中更深入地search它。 这是应提供初始视图的控制器的标识符。 如果它没有在文档中定义那么这是一个问题 – 你应该从文档标签中删除它,在我的情况下initialViewController =“Q7U-eo-vxw”
  4. 转到名为视图的Xcode菜单项并select版本编辑器>显示比较视图
  5. 这显示在左边的本地版本和在右边的历史版本。 点击历史版本下方的date以获取该故事板的提交列表。 select一个你知道的工作,并比较文档元素。 * initialViewController的id是什么? 这是不同的? 如果是这样,请尝试手动编辑并运行。 xcode历史比较工具在行动