线程1:EXC_BAD_ACCESS(代码= 1,地址= 0x8000000000000010)

时间:2019-04-11 04:17:08

标签: ios swift

我有一个应用程序,其中包含完整的视频和图像的集合视图。当您点击其中一个时,您会选择全屏查看媒体。当我点击图像时,它会根据需要工作。但是,当我运行我的应用程序并点击其中一个视频时,出现以下错误:

  

线程1:EXC_BAD_ACCESS(代码= 1,地址= 0x8000000000000010)

我在这里得到这个:

class AppDelegate: UIResponder, UIApplicationDelegate {

这可能是由于内存问题造成的吗?

发生了什么事,我该如何解决?

我看过here,但无法解决。

我发现失败实际上是在调用波纹管函数时发生的。

func getAndShowMedia(post: Post) {
    if post.media[numberMedia].image != nil {//here is still works, I am assuming this line is the line which actualy fails
        print("imageooooo")//When setting break point here it will crash
        mediaView.image = nil
        mediaView.image = (post.media[numberMedia].image)!
    } else {
        mediaView.layer.removeFromSuperlayer()
        let videoURL = post.media[numberMedia].videoURL
        let player = AVPlayer(url: videoURL! as URL)
        let playerLayer = AVPlayerLayer(player: player)
        print("videooooooo")
        playerLayer.frame = mediaView.bounds
        mediaView.layer.addSublayer(playerLayer)
        player.play()
    }
}

这里:

func loadOtherData() {        
    getAndShowMedia(post: selectedPost!)
}

2 个答案:

答案 0 :(得分:1)

请检查您的代码,并告诉我崩溃的地方。

我阅读了您的代码,并假设发生了崩溃,我将代码写在下面并检查调试模式。

  1. post.media[numberMedia].image您所检查的内容为nil,请使用if let语句。
  2. post.media[numberMedia].videoURL进入模型URL对象,该对象将发生崩溃。
  3. mediaView.layer.removeFromSuperlayer()我不明白您拥有remove层的代码,但是您添加了子层mediaView.layer.addSublayer(playerLayer)然后删除了子层。检查子图层是否可用,然后删除子图层,而不是删除mediaView图层。

使用此代码删除图层。

mediaView.layer.sublayers?.forEach({ $0.removeFromSuperlayer() })

我希望这段代码能用。

答案 1 :(得分:-1)

从Xcode的Breakpoint菜单中,按左下角的“ +”按钮,然后添加一个例外断点。这将向您确切显示您的应用崩溃的位置,并且您可以对其进行正确的调试。

您有一些可能没有用的强制拆开包装,应该避免这种情况。