通过按钮替换 ViewController,线程 1:EXC_BAD_INSTRUCTION

Posted

技术标签:

【中文标题】通过按钮替换 ViewController,线程 1:EXC_BAD_INSTRUCTION【英文标题】:Replace ViewController via Button, Thread 1: EXC_BAD_INSTRUCTION 【发布时间】:2018-08-07 22:50:49 【问题描述】:

我想将我的UITableViewController 替换为ViewController,内部带有UITableView。为此,我使用以下代码:

@objc func buttonAction(sender: UIButton!) 
    let newController = storyboard?.instantiateViewController(withIdentifier: "VcId") as! JobTableViewController
    self.navigationController?.present(newController, animated: true, completion: nil)

但我总是在第二行得到这个错误

线程 1:EXC_BAD_INSTRUCTION(代码=EXC_I386_INVOP,子代码=0x0)

【问题讨论】:

上传你的demo到github 添加警戒检查以确保故事板实际实例化了您的 VC 或它返回 nil 用下面的代码让它工作:self.navigationController?.popToRootViewControllerAnimated(true) 【参考方案1】:

你应该这样做:

guard let newController = storyboard?.instantiateViewController(withIdentifier: "VcId") as? JobTableViewController else return
self.navigationController?.present(newController, animated: true, completion: nil)

这个错误可能是因为在storyboard中找不到viewcontroller,你可能给了错误的ID。

【讨论】:

以上是关于通过按钮替换 ViewController,线程 1:EXC_BAD_INSTRUCTION的主要内容,如果未能解决你的问题,请参考以下文章

通过在另一个 ViewController 中按下按钮/在另一个 ViewController 中引用 UITableView 创建 UITableViewCell

Swift - 通过点击 ScrollView 内的 ViewController 内的按钮来滚动 UIScrollView

如何通过 segue 到下一个 ViewController 使“查看全部”按钮显示数据?

如何通过单击 iPhone 故事板中的 ActionSheet 按钮移动到下一个 viewController

禁用按钮不更改图像

通过 UIScrollView 推送 ViewController