Exc_bad_instruction 与 SWRevealViewController

Exc_bad_instruction with SWRevealViewController

背景 我的应用程序有一个 MainViewController 和一个 UIButton ,当按下时会导致另一个 ViewController 。在第二个 ViewController 中是一个 UIBarButtonItem,它有一个 "Back" segue 到 MainViewController。一切都运行良好,直到现在我在 SWRevealViewController 的帮助下编写了一个滑出菜单并且我遵循了这个 Jared Davidson 教程 https://www.youtube.com/watch?v=8EFfPT3UeWs(简单、通用和容易)

问题 滑出菜单完美运行,但现在当按下第二个 ViewController 中的 "Back" 按钮时,由于

导致应用程序崩溃

EXC_BAD_INSTRUCTION (code=EXC_I1386_INVOP, subcode=0x0)

来自 MainViewController 文件中的以下代码,关于滑出菜单的平移手势。

代码

这是关于滑出菜单的主要ViewController代码。它工作完美,但它在第二个 ViewController.

上使用简单的 "Back" segue 进行推断
@IBOutlet weak var Open: UIBarButtonItem!

override func viewDidLoad() {
    super.viewDidLoad()

    Open.target = self.revealViewController()
    Open.action = Selector("revealToggle:")

self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer()) //THIS IS THE CODE WHERE THE ERROR ALEERT OCCURS

}

删除最后一行代码后,"Back" segue 再次运行,但显然不是滑出菜单。

帮助 是否可以将平移手势代码仅指定给 MainViewController 及其滑出菜单,并让 "Back" segue 像以前一样仅显示 MainViewController and/or "ignore"这行代码。 或者是否有可能以其他方式将这两者分开并避免我的应用程序在按下第二个 ViewController(返回 MainViewController)的 "Back" segue 时崩溃?

在此先感谢传说。

首先您需要检查 Open 是否为零。当 UIViewController 未正确创建时,可能会发生此错误。试试这个代码:

@IBOutlet weak var Open: UIBarButtonItem?

override func viewDidLoad() {
    super.viewDidLoad()

    if Open == nil {
        assertionFailure("Open is nil")
    }

    if let revealViewController = revealViewController() {
        Open?.target = revealViewController
        Open?.action = "revealToggle:"

        view.addGestureRecognizer(revealViewController.panGestureRecognizer())
    }
}