我有一个项目,我有一个故事板。故事板包含多个视图控制器。我将简化它并省略不必要的细节。在导航控制器中,有几个UIViewControllers与segue连接。 (见下面的截图...)
在底行从左到右依次为导航控制器➞V11➞VC2。 VC1还在顶行的VC3上有一个手动segue,它VC3➞VC4。 VC1是应用程序的起始视图控制器。有两个从VC1连接的segue。来自VC1➞VC2的segue是主要的segue,而VC1➞VC3是次要的。当用户第一次运行应用程序时,将以编程方式调用辅助segue作为一种欢迎/启动序列。
我将其设置为this post here,引用第二个最受欢迎的帖子,其中用户建议起始VC文件本身与另一个VC的视图之间的segue然后调用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已经正确呈现,这个错误源自VC1,由 Receiver (<X.VC1>)
表示。我很难过。我在网上发现的所有错误都显示了其他对我没用的解决方案。当我说我知道拼写是正确的时,如果你不相信我,A)它正确地加载了视图控制器,B)无论如何这里都是截图。
我得知它:[ 如果您有建议,请告诉我。谢谢大家。
**再次,只是作为一个提醒,这个应用程序正确加载和显示VC3应该是它应该。当我试图接近VC4时发生错误,但由于没有标识符,因此接口是正常的接口,因为它不会像VC3那样与代码链接。
编辑:Here is a sample project正常运行。我无法区分使我与众不同的差异。 编辑#2:我承认犯了一个愚蠢的错误。标记的解决方案已经找到并纠正了它,项目现在可以按照需要运行。谢谢大家。答案 0 :(得分:1)
我研究你的项目,发现你为VC4分配了错误的类,如下图所示:
只需删除该HomeVC并为其分配新类,它就可以正常工作。
答案 1 :(得分:0)
好像你没有设置segue identifier
。尝试调用performSegueWithIdentifier
的{{1}}方法。但它不可用,所以崩溃发生。
要删除以下崩溃,请执行以下步骤。
第1步:点击两个welcomeSegue
之间的segue。像
第2步:现在检查面板右侧的segue的属性。将标识符名称写为 welcomeSegue ..如
现在运行你的项目,你将面临任何崩溃..