如何删除此 EXC_BAD 访问错误?

Posted

技术标签:

【中文标题】如何删除此 EXC_BAD 访问错误?【英文标题】:How to remove this EXC_BAD Access error? 【发布时间】:2016-07-16 18:13:27 【问题描述】:

我的代码:

override func viewDidLoad()

    super.viewDidLoad()
    imagePicker.delegate = self
    myScrollView.delegate = self
    myScrollView.subviews.forEach( $0.removeFromSuperview() )

    for i in 1...2
    
        myView = UIView(frame:CGRectMake(myView.frame.origin.x,22.0,320,83))
        myView.tag = i
        myScrollView.addSubview(myView)
        myScrollView.contentSize = CGSizeMake(myScrollView.frame.size.width*2,128.0)
    

错误:

致命错误:在展开可选值时意外发现 nil (lldb)

【问题讨论】:

【参考方案1】:

    这行可能不正确:

     myView = UIView(frame:CGRectMake(myView.frame.origin.x,22.0,320,83))
    

    您在实例化它的同一行中使用myView。如果您在调用此行之前检查myView,则很可能是nil

    myScrollViewimagePicker 很可能是隐式包装的可选 @IBOutlet,即 nil。在使用这些值之前检查它们(通过插入print 语句,或者通过添加断点然后在调试器中检查这些值)。看看这两个是不是nil

    就为什么可能是nil而言,两个最常见的问题是:

    如果您忽略了在 Interface Builder 中挂钩 @IBOutlet,则插座可以是 nil。这可以通过检查 IB 中滚动视图的出口来确认。也可以通过查看插座旁边左边距的插座接头是否快速确认

    已连接:

    未连接:

    如果以编程方式过渡到此场景,但这样做不正确(即从类而不是从情节提要中实例化此场景),您也可以将出口设为 nil

【讨论】:

我已检查插座已连接 没有连接插座,我在这条线上遇到错误--- myView.tag = i 好的,所以你是说出口连接到 IB,但在viewDidLoad 出口似乎是nil?如果是这种情况,问题可能是您如何实例化视图控制器(我的第二点)。你是如何实例化视图控制器的? 这是我的代码----->override func viewDidLoad() super.viewDidLoad() imagePicker.delegate = self myScrollView.delegate = self //// myScrollView.subviews.forEach( $0.removeFromSuperview() ) // for i in 1...2 // // myView = UIView(frame:CGRectMake(myView.frame.origin.x,22.0,320,83)) // myView.tag = i // myScrollView.addSubview(myView) // myScrollView.contentSize = CGSizeMake(myScrollView.frame.size.width*2,128.0) // 我在设置视图标签时收到 EXC_BAD_INSTRUCTION。请检查我是否正确设置了标签

以上是关于如何删除此 EXC_BAD 访问错误?的主要内容,如果未能解决你的问题,请参考以下文章

错误:无法通过行访问已删除的行信息

如何调试 dotnet ef 数据库删除?

Flutter:我应该如何访问此删除请求中的响应正文?

如何验证网络文件夹访问

错误:需要左值作为赋值的左操作数,我收到此错误啥是左值和右值以及如何删除此错误

如何删除此错误“ModuleNotFoundError: No module named 'sklearn.cross_validation'”