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次,我的“是初始视图控制器”被检查,相信我。 它发生在蓝色之外。 那我是怎么修好的?
- 在您的项目中创build一个新的Storyboard,将其命名为Main_iPhoneV2(或iPadV2,取决于您的原始故事板样式)
- 打开破碎的故事板,单击白色区域中的任意位置,然后按命令-a,然后命令-c(全选并复制)
- 打开你的新故事板,按命令V粘贴相同的确切设置
- 转到您的项目设置,将您的“主界面”更改为新的Main_iPhoneV2(如果是iPad,并且正在编写通用应用程序,则必须编辑-Info.plist并查找值“Main storyboard file基地名称(iPad)
- 重新编译,并停止拉你的头发
检查属性检查器中的初始视图控制器 。
首先点击右侧“ 实用工具”栏中的“视图控制器”。 接下来select属性检查器 ,并确保在视图控制器部分的“是初始视图控制器”checkbox被选中!
使用Interface Builder:
检查是否设置了“ 初始视图控制器 ”。 您可以使用以下步骤进行设置:
- select您的视图控制器 (这是作为初始屏幕出现)。
- 从Utilities窗口中selectAttribute inspector 。
- 从视图控制器部分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>
以下是可帮助您排查问题的一些步骤:
- 右键单击失败的Storyboard并使用源代码pipe理>提交…保留自上次提交以来所做的更改。
- 尝试右击失败的Storyboard并使用“Open As> Source Code”查看故事板的XML。
- 在文档元素中,查找名为“ initialViewController ”的属性。 如果丢失了,别担心,我们会解决的。 如果它在那里,双击分配给它的id,command-c复制它,command -f command -v在文档中更深入地search它。 这是应提供初始视图的控制器的标识符。 如果它没有在文档中定义那么这是一个问题 – 你应该从文档标签中删除它,在我的情况下initialViewController =“Q7U-eo-vxw” 。
- 转到名为视图的Xcode菜单项并select版本编辑器>显示比较视图
- 这显示在左边的本地版本和在右边的历史版本。 点击历史版本下方的date以获取该故事板的提交列表。 select一个你知道的工作,并比较文档元素。 * initialViewController的id是什么? 这是不同的? 如果是这样,请尝试手动编辑并运行。