【问题标题】:performSegueWithIdentifier throwing strange errorperformSegueWithIdentifier 抛出奇怪的错误
【发布时间】: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 (&lt;X.VC1&gt;) 所示。我难住了。我在网上发现的所有错误都显示了其他对我不起作用的解决方案。如果你不相信我说我知道拼写是正确的,A) 它正确加载了视图控制器,B) 无论如何这里是截图。

我不明白:[ 如果您有建议,请告诉我。谢谢大家。

** 再次提醒一下,此应用程序可以正确加载和显示 VC3。当我尝试转至 VC4 时发生错误,但通过没有标识符的接口构建器进行转场是正常的,因为它不需要像转至 VC3 的转场那样链接到代码。

编辑:Here is a sample project 功能正常。我无法区分让我与众不同的区别。

编辑#2:我承认犯了一个愚蠢的错误。标记的解决方案已找到并更正它,项目现在可以正常运行。谢谢大家。

【问题讨论】:

  • @Raja Vikram 同样的结果,恐怕。好主意。
  • 尝试在viewWillAppear / viewWillLayoutSubviews中使用您的代码
  • @Dharmesh Kheni 是的,我会马上添加一个。
  • 好吧,示例项目实际上完全按照它应该做的...
  • 示例项目在哪里?

标签: ios xcode swift storyboard segue


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    你好像没有设置segueidentifierperformSegueWithIdentifier 方法试图调用 welcomeSegue。但它不可用,所以会发生崩溃。

    要消除以下崩溃,请按照以下步骤操作。

    第 1 步:点击两个 UIViewController 之间的转场。就像

    第 2 步:现在在面板右侧检查该 segue 的属性。其中将标识符名称写为 welcomeSegue.. 像

    现在运行你的项目,你将面临任何崩溃..

    【讨论】:

    • 存在 segue 标识符。您可以在屏幕截图中看到它。
    • @WillB,请检查分配标识符时是否没有剩余空间?所以我建议你在propery中再次重写。
    • @WillB,同样在 viewWillAppera 方法中推送你的控制器。
    • 完成了。他们都没有被证明是成功的。不过,我很欣赏这些建议。
    猜你喜欢
    • 1970-01-01
    • 2017-07-25
    • 2018-05-11
    • 1970-01-01
    • 1970-01-01
    • 2015-10-25
    • 1970-01-01
    • 2020-10-23
    • 1970-01-01
    相关资源
    最近更新 更多