【问题标题】:performSegueWithIdentifier throws unknown exceptionperformSegueWithIdentifier 抛出未知异常
【发布时间】:2016-06-29 18:50:47
【问题描述】:

我正在尝试通过拆分它来重构我的一个 ViewController。 这是一个将进行卡片操作的应用程序。我有一个可以编辑多种类型的随机播放的控制器,但现在我将它拆分为单独的控制器,用于每个单独的随机播放类型。

还有另一个故事板可让您选择动作,它设置为从隐藏按钮中进行转场。 segues 指向情节提要参考。最初我为调度故事板中的 segues 制作场景,然后使用 Xcode 的 Editor>Refactor to Storyboard 菜单项对其进行重构。

然后我为 FaroEditor 视图控制器制作了一个新的故事板。然后我试图弄清楚如何添加对这个故事板的引用。我终于在对象库中找到了“故事板参考”。

我把它放在 dispatch storyboard 中,并将它设置为指向 FaroEditor storyboard:

我做了一些 photoshopping,将故事板、故事板引用属性和 segue 属性放在一个图像中。

当我运行并触发 segue 时,我抛出了一个异常,没有关于它是什么的信息:

我再次使用 Photoshop 将顶部的三个堆栈帧复制并粘贴到一个图像中。

我不知道如何诊断和解决这个问题。有什么想法吗?

【问题讨论】:

  • 此时segueId 等于什么?
  • 它在回溯中是 'editFaro',这是原始故事板中 segue 的 ID。
  • 我做了更多调查。我单步执行了机器代码,当 StoryBoard.instantiateViewControllerWithIdentifier: 被调用时它正在爆炸。我无法解密它在哪里获取它正在使用的标识符。在调试器中,我可以实例化目标故事板,然后实例化 ViewControllerWithIdentifier: 使用我手动分配的标识符,但我不知道 UIKit 代码如何获取视图控制器的明显错误标识符。无论我是否手动给视图控制器一个标识符,它都会失败。

标签: xcode swift uiviewcontroller segue xcode-storyboard


【解决方案1】:

您需要在您引用的视图上添加一个“故事板 ID”,然后将相同的 ID 添加到属性检查器中的引用 ID

【讨论】:

    【解决方案2】:

    UI 操作应该在主线程中完成

    DispatchQueue.main.async {
    self.performSegue(withIdentifier: "someSegue", sender: self)
    }
    

    重要 除非另有说明,否则只能从应用程序的主线程或主调度队列中使用 UIKit 类。此限制特别适用于从 UIResponder 派生的类或涉及以任何方式操纵您应用的用户界面的类。

    developer.apple.com/documentation/uikit

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-07
      • 2013-05-24
      相关资源
      最近更新 更多