【问题标题】:Xcode: "Scene is unreachable due to lack of entry points" but can't find itXcode:“由于缺少入口点,场景无法访问”但找不到
【发布时间】:2012-11-11 22:24:46
【问题描述】:

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 多个场景)。

有什么建议吗?

【问题讨论】:

    标签: ios xcode storyboard warnings


    【解决方案1】:

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

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

    【讨论】:

    • Mohammad,感谢您的回复,但问题是:我应该在哪个场景设置标识符?我找不到导致警告的场景,这是主要问题。
    【解决方案2】:

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

    【讨论】:

    • 嗨@bobnoble,感谢您的回复。一个问题:为什么要为每个场景设置 Storyboard ID?我不认为这是强制性的,不是吗?我知道如果我想以编程方式访问场景,我必须设置一个 ID,但是如果我的所有场景都通过 segues 连接怎么办?还是只是好的编程习惯?
    • @Wolfy - 好点,您需要查看每个以确保它具有 segue 或 Storyboard ID。
    • 尝试了这个解决方案,我意识到只填写一个特定的Storyboard ID 删除了警告
    • 我有几个 UIViewControllersUINavigationController 并且必须为所有这些设置一个标识符,即使我从未通过标识符调用它们中的一个。真烦,找个没人的bug!
    • 为我工作。有谁知道为什么会出现这种情况?似乎非常难以发现 - 回想起来,给出的错误提供了一个微不足道的线索。我在将故事板转换为最新最好的版本后得到了它 - 如果现在需要故事板 ID,那么以前肯定不需要,并且自动转换没有处理它。
    【解决方案3】:

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

    【讨论】:

    • 在所有视图控制器都有自己的 segue 或 ID 之后,错误消息可能仍然存在。在这种情况下,清洁产品,它就会消失。
    • 在我的情况下,在我修复错误后,产品清洁不足以消除错误消息。当我重新启动 Xcode 时它消失了。 (我没有尝试关闭/重新打开项目。这可能也有效。)
    • 对我来说也一样——最终你需要停止并重新启动 xcode 以消除错误消息。
    【解决方案4】:

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

    【讨论】:

    • 这对我有帮助。我正在使用超过 7.1.1 Swift 2。初始 StoryBoard 必须是根视图控制器。
    【解决方案5】:

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

    • 在项目导航器中按住 Ctrl 并单击 .storyboard 并选择 Open As > Source Code。这将调出 Storyboard 的底层 XML。
    • 在此视图中,警告将清楚地与 XML 中与违规场景相关的行相关。

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

    【讨论】:

    • 奇怪的是,这似乎并不能始终如一地工作。在我遇到问题的情况下,它起作用了。现在我正在测试它,Source Code 视图没有显示错误。因此,里程可能会有所不同。
    • 我没有找到带有这个的视图控制器,但我删除了它(在 XML 中,在 ID 中不起作用)并且警告消失了。
    【解决方案6】:

    也许这个 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>
    

    【讨论】:

      【解决方案7】:

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

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

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

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

      【讨论】:

      • 这也发生在我身上,但我仍然不得不填补许多空的Storyboard ID
      • ...那么我相信@bobnoble 是正确的答案,需要用√标记
      【解决方案8】:

      对我来说,这不是因为Storyboard IDSegue。我收到此警告是因为我没有设置 View Controller's Custom Class

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

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

      【讨论】:

      • 我刚刚对此进行了修改。我将情节提要中的错误 ViewController 与 ViewController 类匹配,并且与情节提要 ID 相同。
      【解决方案9】:

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

                                          

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

      【讨论】:

        【解决方案10】:

        找到违规场景的最简单方法:

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

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

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

        【讨论】:

        • 感谢您的提示“简单的修复是给这个根视图控制器一个故事板 ID”。它解决了我的问题。好吧,我需要将“故事板 ID”提供给 UINavigationController。
        • 这将我指向带有主菜单的应用程序场景。不能给那个故事板 ID。
        【解决方案11】:

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

        【讨论】:

          【解决方案12】:

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

          【讨论】:

            【解决方案13】:

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

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

            是初始视图控制器

            已检查。瞧!

            【讨论】:

              【解决方案14】:

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

              【讨论】:

                【解决方案15】:

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

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

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

                【讨论】:

                  【解决方案16】:

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

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

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

                  案例二

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

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

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

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

                  案例三

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

                  希望对你有帮助

                  【讨论】:

                  • CASE III - 帮助了我。谢谢!
                  • 我有一个示例项目带有旧的 xib 文件。我创建了一个故事板,我目前正在受苦..需要将 xib 转换为故事板格式并从那里移动..看不到任何方法来创建应用程序场景或菜单..
                  【解决方案17】:

                  这对我有用:

                  1. 在文本编辑器中打开情节提要。
                  2. 将版本从 3.0 更改为 2.0 保存并关闭它。
                  3. 在 Visual Studio 中再次打开它。它会自动转换并打开文档。

                  【讨论】:

                    【解决方案18】:

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

                    修复了删除该警告的问题。

                    【讨论】:

                      【解决方案19】:

                      简单地为所有 MVC 提供一个故事板 ID 对我有用。

                      【讨论】:

                        【解决方案20】:

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

                        享受!!!

                        【讨论】:

                          【解决方案21】:

                          您不需要为所有场景设置Storyboard IDUINavigationController

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

                          您可以在上图中看到UINavigationController 没有与segue 连接,这是该警告的罪魁祸首。

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

                          【讨论】:

                            【解决方案22】:

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

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

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

                            【讨论】:

                              猜你喜欢
                              • 1970-01-01
                              • 2015-10-18
                              • 2014-10-11
                              • 1970-01-01
                              • 1970-01-01
                              • 2012-04-02
                              • 1970-01-01
                              • 2016-07-06
                              • 1970-01-01
                              相关资源
                              最近更新 更多