Xcode:“由于缺less入口点而无法访问”,但无法find它

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:. 

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

有什么build议么?

截图警告

虽然这个线程是旧的,我没有看到一个答案描述什么对我有用,所以这里去…

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

我尝试命名故事板中所有17个视图控制器(如@ bobnoble的答案)。 我使用了基于视图控制器的长名称的命名约定,例如“作业视图控制器”的“jvc”。 当我试图构build时,我得到一个错误消息指向一个视图控制器具有重复的名称。 跟踪事情,我发现我有一个视图控制器的实际重复完全堆叠在它的双胞胎之上。 我怀疑这是来自用户界面实验的剪切和粘贴破坏,我没有完全退出。

无论如何,删除无关的孪生兄弟解决了我的问题。 之后,我删除了所有VC名称,因为它们在代码中没有被引用。

在故事板中,select每个视图控制器(下图中的红色箭头)并查看故事板ID字段(红色椭圆形)。 Storyboard ID字段都不应该为空。 当你find一个,那是罪魁祸首。

在这里输入图像说明

我只是有一个简单的单场景故事板的确切的错误,我所要做的只是检查故事板中的1视图控制器的“初始视图控制器”checkbox。 在这种情况下,我怀疑Xcode默认情况下会为你检查这个盒子,但是不会再这样做。

选中底部的框

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

恐怕你必须通过所有30个,并检查他们是否有一个故事板ID或赛格视图控制器。 其中一个是必需的,两者都是一个选项。

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

情况一:如果故事板中没有任何一个场景被标记为“isInitialViewController”

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

案例二

可能有情况下,你不需要在故事板中有一个initialViewController。 例如:使用多个故事板时。

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

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

在这种情况下, “故事板ID”是强制性的。

案例三

你有你的initialViewController连接。 但是你仍然得到这个警告。 这是因为故事板中的某些场景可能没有与“segue”连接,也没有“storyboard id” 。 扫描你的故事板,看看是否需要“segue” 。 连接segue,如果缺less。 如果不需要segue,请确保您需要提供“storyboard id”,因为这是从代码中引用场景的唯一方法,如上面的示例代码所示。

希望这可以帮助

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

那么我有大约50-60场景,我只是得到这些警告,所以我意识到只有控制器(场景)或不与segue连接的NavigationController需要设置Storyboard ID

在这里输入图像说明

你可以看到,在上面的图像UINavigationController没有连接到segue,这是一个警告的罪魁祸首。

只要给它一个故事板ID来消除这个警告。

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

最简单的方法来find违规的场景:

转到问题导航器(在左侧面板中,searchbutton旁边),然后双击错误。 将popup一个窗口,其中包含以窗口中心为中心的违规场景。

(这实际上通常是真的 – 双击任何错误通常会导致包含错误中心的popup窗口 – 一个整洁的小技巧!)

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

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

  • 在Project Navigator中按住Ctrl键并点击.storyboard ,然后selectOpen As > Source Code 。 这将调出Storyboard的底层XML。
  • 从这个angular度来看,这个警告显然与XML中与违规场景相关的一行有关。

现在,对我来说,这个警告特别恼人,因为“犯罪现场”有一个标识符和一个segue! 我能够通过删除场景,然后撤消删除来弥补问题。 不优雅,但工作。 在这之前我保存了我的Storyboard。 回想起来,我应该在之前做一个复制和diff

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

selectStoryboard上的View Controller ,然后在Utilities Pane中selectIdentity Inspector图标。 在“ Custom Class ,查看“ Class字段中的值。

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

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

select您希望成为第一个的视图控制器,显示属性检查器,并在视图控制器部分下,确保

是初始视图控制器

被检查。 瞧!

使用Xcode 7可以轻松处理。 没有必要手动通过所有的场景来find一个有问题的。 首先进入报告导航器 ,您可以在其中获得有关已知问题的更多详细信息。 问题描述可以像这样:

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

有了这个信息,你可以复制对象ID,在这种情况下,它是fPh-fe-F5F ,并search工作空间的这个string的发生。 string将在Main.storyboard文件中find。 双击search结果,它将打开Main.storyboard与选定的场景。 一旦你知道有问题的场景,你可以很容易地解决这个问题,通过设置故事板ID或设置“是初始视图控制器”

你可以设置一个标识符。 在右侧窗格的属性检查器上,您会看到一个名为“标识符”的字段。 只要把任何string,这应该工作

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

我面临同样的问题,解决了所有viewController和NavigationController放在故事板ID任何标识符; 该错误将被立即删除

请享用!!!

也许这个XQuery将帮助你find那些讨厌的场景

 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> 

我不知道这是否还没有提到,但另一个原因,你可以得到这个警告是,如果你有一个顺时针走错方向。 例如,在我的项目中,我得到了这个警告,但我所有的控制器实际上是连接的。 然而,其中一人有一个小孩,主要是从孩子而不是父母介绍孩子的父母。 这导致了相同的警告。

我得到这个警告,当我有一个UIViewController在故事板中没有任何设置。 我通过设置Storyboard ID来避免这个警告。

我有同样的问题,但我意识到,我正在使用容器视图,而不是删除默认的视图控制器,我删除了它的segue.So视图控制器留在故事板,所以是警告。 因此,如果在不需要的情况下,容器视图的默认视图控制器没有正确删除,那么这是警告popup的情况之一。

我尝试了上面所描述的一切都无济于事。 我已经在IB中正确连接了一切,只有一个UIViewController指定了根视图控制器。 我没有标识符,但添加到我的所有控制器。

我可以让警告消失的唯一方法是通过做上面的所有事情(包括电脑重启和干净的构build), 然后切换到我的项目在git中的无误分支, 然后再回来。

不确定哪一个行动修正了它,或者哪个行动的组合,但它不是自己的干净的构build。 这可能是Main.storyboard的副产品,只是简单地被打开而改变,这意味着我必须比我想要的更经常地git commit -m "Stupid storyboard"

这是什么对我有用:

  1. 在文本编辑器中打开故事板。
  2. 将版本从3.0更改为2.0保存并closures它。
  3. 在Visual Studio中再次打开它。 它会自动转换并打开文档。

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

修复,删除该警告。

简单地给所有的MVC一个故事板ID为我工作。