我有一个项目,其中有一个故事板。故事板包含几个视图控制器。我将简化它并省略不必要的细节。在导航控制器中,有多个UIViewController与segue挂钩。 (请参见下面的屏幕截图...)

从左至右在底部一行中是导航控制器➞VC1➞VC2 。 VC1在最上面一行还对VC3进行了手动选择,即 VC3➞VC4 。 VC1是应用程序的启动视图控制器。从VC1有两个连接。来自 VC1➞VC2 的序列是主要的序列,来自 VC1➞VC3 的序列是次要的序列。当用户首次运行该应用程序时,将以编程方式调用第二阶段,作为一种欢迎/入门序列。

我将它设置为this post here的起点,引用第二个最受争议的帖子,在该帖子中,用户建议在起始VC文件本身和另一个VC的视图之间进行排序,然后调用performSegueWithIdentifier ....这就是问题所在。

运行此应用程序时,没有编译时错误。一切看起来不错。它加载完毕,并且我已经设置好了,以便视图加载完毕,现在我迫使它像第一次那样运行...

override func viewDidLoad() {
    super.viewDidLoad()

    let firstVisit = true

    if firstVisit == true {
        self.performSegueWithIdentifier("welcomeSegue", sender: self)
    }

    // Do any additional setup after loading the view.
}

因此它加载。我可以告诉它尝试在VC3迅速按需要推到顶部之前显示VC1。 VC3的显示非常出色。当我按下VC3上的唯一按钮(应该从 VC3➞VC4 执行典型的segue)时,就会出现问题。这是当我收到以下错误时:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Receiver (<X.VC1>) has no segue with identifier 'welcomeSegue''

现在,对我来说,我无法弄清的奇怪之处是,即使正确呈现了VC3,该错误也是由Receiver (<X.VC1>)表示的,是VC1。我很沮丧我在网上发现的所有错误都显示了其他不适用于我的解决方案。如果您说我知道拼写正确时不相信我,则A)正确加载了视图控制器,B)仍然是屏幕截图。

我知道了:[
如果您有意见,请告诉我。谢谢大家

**再次提醒您,此应用应正确加载并显示VC3。当我尝试将VC4设置为SEGUE时发生错误,但是该SEGUE是通过没有标识符的接口构建器是正常的,因为它不需要链接代码,就像VC3的SEGUE一样。

编辑:Here is a sample project正常运行。我无法区分使我与众不同的差异。

编辑#2:我承认犯了一个愚蠢的错误。标记的解决方案已找到并纠正了该问题,该项目现在可以按需运行。谢谢你们。

最佳答案

我研究了您的项目,发现您为VC4分配了错误的类,如下图所示:

只需删除该HomeVC并为其分配新的类,它将正常工作。

10-07 21:53