我有一个应用程序,其中包含完整的视频和图像的集合视图。当您点击其中一个时,您会选择全屏查看媒体。当我点击图像时,它会根据需要工作。但是,当我运行我的应用程序并点击其中一个视频时,出现以下错误:
线程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!)
}
答案 0 :(得分:1)
请检查您的代码,并告诉我崩溃的地方。
我阅读了您的代码,并假设发生了崩溃,我将代码写在下面并检查调试模式。
post.media[numberMedia].image
您所检查的内容为nil,请使用if let
语句。post.media[numberMedia].videoURL
进入模型URL
对象,该对象将发生崩溃。mediaView.layer.removeFromSuperlayer()
我不明白您拥有remove
层的代码,但是您添加了子层mediaView.layer.addSublayer(playerLayer)
然后删除了子层。检查子图层是否可用,然后删除子图层,而不是删除mediaView
图层。使用此代码删除图层。
mediaView.layer.sublayers?.forEach({ $0.removeFromSuperlayer() })
我希望这段代码能用。
答案 1 :(得分:-1)
从Xcode的Breakpoint菜单中,按左下角的“ +”按钮,然后添加一个例外断点。这将向您确切显示您的应用崩溃的位置,并且您可以对其进行正确的调试。
您有一些可能没有用的强制拆开包装,应该避免这种情况。