You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:14:42