Xcode 10中按钮播放视频触发SIGABRT报错问题求助
解决AVPlayer点击按钮触发SIGABRT的问题
看起来你遇到了点击按钮后AVPlayer功能失效还触发SIGABRT崩溃的问题,我帮你梳理几个常见的原因和对应的解决办法:
1. 文件名/后缀的拼写不一致
你的代码里有个明显的小错误:在guard语句中你查找的是**video.mp4**,但debug打印的却是video.m4v not found。如果你的视频实际后缀是.m4v,那代码里的ofType:"mp4"就会找不到文件,后续逻辑出错可能触发崩溃。
先修正这个拼写不一致的问题,确保代码里的文件名和后缀和实际文件完全匹配:
guard let path = Bundle.main.path(forResource: "video", ofType:"mp4") else { debugPrint("video.mp4 not found") // 这里和ofType保持一致 return }
2. AVPlayer对象被提前释放
你当前的AVPlayer是方法内的局部变量,虽然AVPlayerViewController会持有它,但在某些情况下(比如present动画还未完成时),局部变量可能被提前释放,导致播放逻辑崩溃。
解决办法是把AVPlayer声明为ViewController的实例变量,延长它的生命周期:
import UIKit import AVKit import AVFoundation class ViewController: UIViewController { // 声明为实例变量,避免被提前释放 private var player: AVPlayer? override func viewDidLoad() { super.viewDidLoad() } @IBAction func VideoPlayer(_ sender: Any) { guard let path = Bundle.main.path(forResource: "video", ofType:"mp4") else { debugPrint("video.mp4 not found") return } let videoURL = URL(fileURLWithPath: path) player = AVPlayer(url: videoURL) let playerController = AVPlayerViewController() playerController.player = player present(playerController, animated: true) { // 使用self.player确保引用有效 self.player?.play() } } }
3. 视频文件未正确添加到Target
即使文件名正确,如果视频文件没有被添加到当前项目的Target中,Bundle里也找不到它。你可以这样检查:
- 选中项目中的视频文件
- 打开右侧的File Inspector面板
- 确认Target Membership下已经勾选了你当前的App Target
4. 视频文件损坏
最后,检查你的video.mp4文件是否本身损坏:把文件拖到QuickTime播放器中,如果无法正常播放,那就是文件本身的问题,替换一个可用的视频文件即可。
内容的提问来源于stack exchange,提问作者James Daniel Lopez
相关产品推荐
相关产品推荐

