89

Xcode 4.5.2 给了我以下警告:

Unsupported Configuration    
Scene is unreachable due to lack of entry points and does not have an identifier 
for runtime access via -instantiateViewControllerWithIdentifier:.

不幸的是,我无法确定犯罪现场。在问题导航器中选择警告不会突出显示情节提要中的任何内容。我有一个相当复杂的故事板(30 多个场景)。

有什么建议么?

警告截图

4

22 回答 22

139

在情节提要中,选择每个视图控制器(下图中的红色箭头)并查看情节提要 ID 字段(红色椭圆形)。所有 Storyboard ID 字段都不应为空。当你找到一个,那就是罪魁祸首。

在此处输入图像描述

于 2012-11-23T19:50:56.620 回答
50

虽然这个线程很旧,但我没有看到描述什么对我有用的答案,所以这里......

我遇到了这个错误,对故事板的视觉检查显示所有视图控制器似乎都连接到根视图控制器。

我尝试在故事板中命名所有 17 个视图控制器(如@bobnoble 的回答)。我使用了基于视图控制器的长名称的命名约定,例如“jvc”代表“Jobs View Controller”。当我尝试构建时,我收到一条错误消息,指出其中一个视图控制器具有重复的名称。跟踪事情,我发现我有一个视图控制器的实际副本,正好堆叠在它的孪生之上。我怀疑这是我没有完全退出的用户界面实验造成的剪切和粘贴损坏。

无论如何,删除未连接的双胞胎解决了我的问题。之后,我删除了所有 VC 名称,因为它们没有在代码中引用。

于 2014-04-25T16:44:10.257 回答
31

我只是在一个简单的单场景故事板中遇到了这个确切的错误,我所要做的就是检查故事板中第一个视图控制器的“是初始视图控制器”复选框。我怀疑 Xcode 在这种情况下默认会为您选中此框,但现在不再这样做了。

选中底部的框

                                     

选中您的故事板中恰好一个视图控制器的框,您应该会很好。

于 2014-12-05T22:05:13.340 回答
20

恐怕您必须检查所有 30 个,并检查它们是否具有 Storyboard ID 或该视图控制器的 segue。两者之一是必需的,两者也是一个选项。

于 2012-11-23T20:05:21.853 回答
8

此问题可能发生在以下情况之一:

案例一: 如果情节提要中没有一个场景被标记为"isInitialViewController"

修复:识别根视图控制器并在您的 SB 中将其标记为“isInitialViewController”。在这种情况下,故事板 ID 不是强制性的。

案例二

在某些情况下,您不需要在情节提要中有 initialViewController。例如:使用多个故事板时。

修复:在这种情况下,请确保正确给出“故事板 id”,并使用此 id 引用故事板中使用的第一个场景。例如:

UIStoryboard *myStoryBoard = [UIStoryboard storyboardWithName:@"MyStoryBoardName" bundle:nil];
MyViewController *myViewController = (MyViewController *)[myStoryBoard instantiateViewControllerWithIdentifier:@"MyViewControllerId"];

在这种情况下,“storyboard id”是强制性的。

案例三

你已经连接了你的 initialViewController。但是您仍然会收到此警告。这是因为情节提要中的某些场景可能没有与“segue”相关联,而且它们也没有“情节提要 id”。扫描你的故事板,看看是否需要“segue”。如果缺少,请连接segue。如果不需要 segue,请确保您需要提供“故事板 ID”,因为这是从代码中引用场景的唯一方法,如上面的示例代码所示。

希望这可以帮助

于 2015-06-24T08:59:07.160 回答
6

您不需要Storyboard ID为所有场景或UINavigationController

好吧,我有大约 50-60 个场景,我刚刚收到这些警告,所以我意识到只有未与 segue 连接的控制器(场景)或 NavigationController 需要设置Storyboard ID

在此处输入图像描述

您可以看到上图中UINavigationController与 segue 无关,这是该警告的罪魁祸首。

只需给它一个 Storyboard ID 即可删除此警告。

于 2016-05-12T06:59:33.267 回答
5

我遇到过同样的问题。我的故事板上有很多视图,带有导航和标签栏控制器。对我来说,这只是一个警告,让您知道某些视图没有关联。 确保您的所有视图都以某种方式连接到根视图控制器。我从头开始这个项目以消除此警告,并在未连接视图时注意到相同的警告。

于 2012-11-26T04:32:49.610 回答
3

找到犯罪现场的最简单方法:

转到问题导航器(在左侧面板中,靠近搜索按钮),然后双击错误。将弹出一个窗口,其中包含位于窗口中间的违规场景。

(这实际上通常是正确的——双击任何错误通常会导致一个包含错误居中的弹出窗口——一个巧妙的小技巧!)

旁注:有时,对于作为导航控制器(即初始视图控制器)的根视图控制器的场景,XCode 会错误地给出此错误。简单的修复是给这个根视图控制器一个 Storyboard ID,编译(错误应该消失),然后删除 storyboardID(不再有错误)。

于 2014-12-23T08:05:41.413 回答
2

查看导致此问题的控制器或场景的最简单方法是:

  • .storyboard在 Project Navigator 中按住 Ctrl 并单击您的并选择Open As > Source Code. 这将调出 Storyboard 的底层 XML。
  • 在此视图中,警告将明确与 XML 中与违规场景相关的行相关。

现在,就我而言,警告特别烦人,因为“违规场景”有一个标识符和一个segue!我能够通过删除场景然后撤消删除来解决问题。不优雅,但工作。在执行此操作之前,我保存了我的故事板。回想起来,我应该制作一个副本并diff写下前后对比。

于 2013-02-18T17:52:22.470 回答
2

对我来说,这不是因为 aStoryboard ID或 a Segue。我收到此警告是因为我没有设置View Controller's Custom Class.

View Controller在上选择Storyboard,然后在 中Utilities Pane,选择Identity Inspector图标。在 下Custom Class,查看Class字段内的值。

如果它只是说UIViewController,那么你需要输入类名。这将是构成您的自定义子类的文件.h的名称。.mUIViewController

于 2014-11-26T19:29:01.170 回答
2

我今天来到了这个问题。我正在使用 Xcode 6.3,OP 问题的答案现在非常简单:

选择您希望成为第一个的 View Controller,显示 Attributes Inspector,然后在 View Controller 部分下,确保

是初始视图控制器

被检查。瞧!

于 2015-04-16T16:32:47.600 回答
2

使用 Xcode 7,这可以轻松处理。无需手动遍历所有场景即可找到有问题的场景。首先转到Report navigator,您可以在其中获取有关已知问题的更多详细信息。问题描述可能如下所示:

Base.lproj/Main.storyboard:fPh-fe-F5F:警告:由于缺少入口点,场景无法访问,并且没有通过 -instantiateViewControllerWithIdentifier 进行运行时访问的标识符:。

使用此信息,您可以复制对象 ID,在本例中为fPh-fe-F5F,并在工作区搜索此字符串的出现。字符串将在 Main.storyboard 文件中找到。双击搜索结果,将打开 Main.storyboard 并选择场景。一旦您知道有问题的场景,您可以通过设置故事板 ID 或设置“是初始视图控制器”轻松解决问题

于 2016-07-31T21:22:45.697 回答
1

您可以只设置一个标识符。在右窗格的属性检查器中,您会找到一个名为“标识符”的字段。只要把任何字符串放在那里,这应该可以

您可以单击导航控制器并在属性检查器下单击按钮“是初始视图控制器”,这也应该可以工作。

于 2012-11-23T14:39:26.377 回答
1

我遇到了同样的问题,并通过在情节提要 ID 上添加所有 viewController 和 NavigationController 的任何标识符来解决;错误将立即删除

请享用!!!

于 2016-03-23T18:03:27.107 回答
0

也许这个 XQuery 会帮助你找到那些讨厌的场景

for $i in .//scene/objects/*[1][not(@storyboardIdentifier) or @storyboardIdentifier= '']/@id      (: find every scene that has an empty storyboardIdentifier :)
where count(.//segue[@destination= $i])= 0 and $i!= ./document/@initialViewController             (: filter the results to the scenes that are not destinations of a segue and exclude the initialViewController :) 
return ($i, $i/../@customClass)                                                                   (: return the storyboard-id and the customClass, if any :)

如果您安装了 xqilla,您可以将查询保存到一个文件并像使用它一样使用它

xqilla <xqueryfile> -i <path to your storyboard>
于 2013-04-09T15:40:33.790 回答
0

我不知道这是否还没有被提及,但是您可能会收到此警告的另一个原因是您是否有一个错误的方向。例如,在我的项目中,我收到了这个警告,但实际上我的所有控制器都已连接。然而,其中一个有一个转场,基本上是试图从孩子那里呈现父母,而不是父母呈现孩子。这引起了同样的警告。

于 2015-04-04T10:05:26.417 回答
0

当我在 Storyboard 中有一个未设置任何内容的 UIViewController 时,我收到了此警告。我通过设置 Storyboard ID 来避免这个警告。

于 2015-04-16T12:02:07.133 回答
0

我有同样的问题,但我意识到我正在使用容器视图,而不是删除默认视图控制器,我删除了它的 segue。所以视图控制器保留在情节提要中,警告也是如此。因此,如果在您不需要容器视图的默认视图控制器时未正确删除它,则会弹出警告,这是其中一种情况。

于 2015-06-01T14:56:50.263 回答
0

我尝试了上述所有方法均无济于事。我在 IB 中正确连接了所有内容,其中一个UIViewController指定了根视图控制器。我没有标识符,但将它们添加到我的所有控制器中。

我可以让警告消失的唯一方法是执行上述所有操作(包括重新启动计算机和干净构建),然后切换到我在 git 中的项目的无错误分支并再次返回。

不确定哪个操作修复了它,或者哪个操作组合,但它本身并不是干净的构建。这可能是 Main.storyboard 的副产品,它总是在打开时发生变化,这意味着我必须git commit -m "Stupid storyboard"比我想要的更频繁。

于 2015-06-18T22:19:35.227 回答
0

这对我有用:

  1. 在文本编辑器中打开故事板。
  2. 将版本从 3.0 更改为 2.0 保存并关闭它。
  3. 在 Visual Studio 中再次打开它。它将自动转换并打开文档。
于 2015-08-03T17:31:03.163 回答
0

我得到了同样的错误:对我来说,错误是我没有在我的故事板中启动视图控制器。

修复它删除了该警告。

于 2015-08-27T06:02:11.273 回答
0

简单地给所有 MVC 一个故事板 id 对我有用。

于 2016-03-03T10:43:04.043 回答