【发布时间】:2015-07-03 04:30:18
【问题描述】:
我有一个项目,其中有一个故事板。故事板包含几个视图控制器。我将简化它并省略不必要的细节。在 Navigation Controller 中,有几个 UIViewControllers 与 segues 挂钩。 (见下方截图...)
在底行从左到右依次为 导航控制器 ➞ VC1 ➞ VC2。 VC1 在顶行也有一个到 VC3 的手动 segue,即 VC3 ➞ VC4。 VC1 是应用程序的起始视图控制器。有两个从 VC1 连接的 segues。 VC1 ➞ VC2 的转场是主要转场,VC1 ➞ VC3 的转场是次要转场。当用户第一次运行应用程序时,将以编程方式调用第二个 segue,作为一种欢迎/入门序列。
我将其设置为从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 执行典型转场的按钮时,就会出现问题。这是我收到以下错误的时候:
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:我承认犯了一个愚蠢的错误。标记的解决方案已找到并更正它,项目现在可以正常运行。谢谢大家。
【问题讨论】:
-
@Raja Vikram 同样的结果,恐怕。好主意。
-
尝试在
viewWillAppear/viewWillLayoutSubviews中使用您的代码 -
@Dharmesh Kheni 是的,我会马上添加一个。
-
好吧,示例项目实际上完全按照它应该做的...
-
示例项目在哪里?
标签: ios xcode swift storyboard segue