【问题标题】:EXC_BAD_ACCESS on nil checking optional in SwiftEXC_BAD_ACCESS on nil 检查在 Swift 中是可选的
【发布时间】:2015-12-15 13:23:33
【问题描述】:

编辑 2:更改一些完全不相关的代码后,崩溃再次发生。即使我尝试恢复代码更改,它也会再次崩溃。

编辑:更新到 iOS 9.2(从 9.1 开始)后,它再次运行没有任何问题。

以下代码在 nil 检查时为我提供了 EXC_BAD_ACCESS:

if(self.imageViews != nil){
    for (_,element) in self.imageViews!.enumerate(){
        element.removeFromSuperview()
    }
}

属性定义如下:

class ImageAdditionalContent : AdditionalContentView {
    var imageViews : [UIImageView]?

即使我尝试先为其分配一个空数组,它也会在分配时给我一个 EXC_BAD_ACCESS:

self.imageViews = []

更有趣的是,它在一天前运行良好。如果我删除整个代码,运行应用程序,退出它,再次添加代码并再次运行它,它第一次在 for 循环中崩溃,然后在 nil 检查中再次崩溃。

【问题讨论】:

    标签: ios swift uiimageview exc-bad-access


    【解决方案1】:

    我会在这里利用选项。至于您的 EXC_BAD_ACCESS,我不仅要检查 UIImageView 数组的状态,还要检查自己的状态。在赋值之前设置一个断点,看看发生了什么。如果这在一天前运行良好,我还会查看您的项目中发生了哪些代码更改。

        if let elements = self.imageViews {
            for element in elements {
                element.removeFromSuperview()
            }
        } else {
            print("self.imageViews is nil! \(self.imageViews)") 
        }
    

    【讨论】:

    • @DJ_Lectr0 它仍然在 element.removeFromSuperview() 处崩溃吗?
    • 这是崩溃的地方? : if(self.imageViews != nil)
    • 是的。即使您使用上面的快速方法。
    • 好的,让我试着理解一下。你已经用我发布的代码完全替换了你的代码,现在它在'let elements = self.imageViews'处崩溃了?在它上面输入这一行,让我知道它是否仍然在同一个地方崩溃 'print("self: (self)")
    • 没错。但是几天前将我的测试手机升级到 9.2 后它就可以工作了。现在它不再起作用了。使用您的代码或我的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    • 2016-06-11
    • 2016-04-07
    • 1970-01-01
    • 2017-07-09
    • 1970-01-01
    相关资源
    最近更新 更多