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

iOS开发:解决'seek(to:)'已弃用及SIGTERM报错问题

解决iOS背景视频循环播放的两个问题:弃用API与SIGTERM错误

先帮你解决第一个弃用API的问题:
你看到的seek(to:)在iOS 11.0后弃用的提示完全正确,针对AVPlayerItem,你需要改用带回调的seek(to:completionHandler:)方法——哪怕不需要处理完成后的逻辑,也要传nil作为回调参数。修改你的videoDidPlayToEnd方法:

@objc func videoDidPlayToEnd(_ notification: Notification) {
    guard let playerItem = notification.object as? AVPlayerItem else { return }
    playerItem.seek(to: CMTime.zero, completionHandler: nil)
}

这里我加了guard let做安全解包,比你原来的as!强制转换更稳妥,能避免因类型不匹配导致的崩溃。

接下来是Thread 1: signal SIGTERM和白屏问题:
重启没用其实很正常,这个问题和你代码里的两个关键疏漏有关:

  • 你完全没调用setupView()方法!viewDidLoad里没有触发视频初始化逻辑,模拟器白屏是因为视频根本没被加载。
  • AVPlayer是setupView()里的局部变量,方法执行完后会被ARC自动释放,视频刚要播放就被销毁,这直接引发了异常错误。

你需要做这两个核心修改:

  1. 把AVPlayer声明为ViewController的类属性,让它能被长期持有:
class ViewController: UIViewController {
    @IBOutlet weak var videoView: UIView!
    // 新增类属性持有player,避免被自动释放
    private var player: AVPlayer?
    
    // ... 其他原有代码
}
  1. 修改setupView()方法,把player赋值给类属性,并且在viewDidLoad里调用初始化方法:
override func viewDidLoad() {
    super.viewDidLoad()
    setupView() // 调用视频初始化逻辑
}

private func setupView() {
    guard let path = Bundle.main.path(forResource: "Cafe Video", ofType: "mov") else {
        print("视频文件找不到,请检查文件名和格式!")
        return
    }
    let url = URL(fileURLWithPath: path)
    player = AVPlayer(url: url) // 赋值给类属性
    
    guard let player = player else { return }
    let newLayer = AVPlayerLayer(player: player)
    newLayer.frame = videoView.bounds // 用bounds替代frame,适配视图大小变化
    newLayer.videoGravity = .resizeAspectFill
    videoView.layer.addSublayer(newLayer)
    
    player.play()
    player.actionAtItemEnd = .none
    
    // 用系统常量注册通知,避免手动写字符串出现拼写错误
    NotificationCenter.default.addObserver(self, selector: #selector(videoDidPlayToEnd(_:)), name: .AVPlayerItemDidPlayToEndTime, object: player.currentItem)
}

另外还有个小优化:建议在控制器销毁时移除通知观察者,避免内存泄漏:

deinit {
    NotificationCenter.default.removeObserver(self)
}

把这些修改整合后,你的视频就能正常循环播放,SIGTERM错误和白屏问题也会随之解决。

内容的提问来源于stack exchange,提问作者Peter H

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:30:34