gpt4 book ai didi

iOS11 在 AVPlayerItemTrack.assetTrack.mediaType (Thread 1 : EXC_BAD_ACCESS (code=1, address=0x0) 上崩溃

转载 作者:可可西里 更新时间:2023-11-01 00:56:27 25 4
gpt4 key购买 nike

我像这样从 AVPlayerItem 观察轨道属性的键值:

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if context == &PlayerItemObserverContext {
[... more code...]
} else if keyPath == #keyPath(AVPlayerItem.tracks) {
if let playerItem = self.playerItem {
for track in playerItem.tracks where track.assetTrack.mediaType == AVMediaType.video {
// Do something with the track
break
}
}
} [... more code...]

但是当快进时我的应用程序在这里崩溃

for track in playerItem.tracks where track.assetTrack.mediaType == AVMediaType.video {

XCode 9 调试器显示 Thread 1: EXC_BAD_ACCESS (code=1, address=0x0

我可以清楚地看到 track.assetTrack 是 nil!

(lldb) po track.assetTrack
<uninitialized>
(lldb) po track
<AVPlayerItemTrack: 0x1c80083b0, assetTrack = (null)>

这不应该发生,因为 AVPlayerItemTrack 上的 assetTrack 类型是 var assetTrack: AVAssetTrack { get } 。但显然这不是真的。

(视频的所有处理都在主线程上完成)

最佳答案

这里的神话是,在对 Swift(在本例中为 4)进行编程时,您处于安全的环境中。我通过艰难的方式学到的是,语言可能是安全的,但运行时不是。

(希望是临时的)修复是执行以下操作:

for track in playerItem.tracks where track.assetTrack != nil && track.assetTrack.mediaType == AVMediaType.video {

甚至编译器也认为这是愚蠢的,因为 XCode 提示:

Comparing non-optional value of type 'AVAssetTrack' to nil always returns true

但它确实有效,应用程序不再崩溃!

代码在 iOS10 和之前的版本上没有修复的情况下工作,但 iOS11 似乎在这方面有严重的倒退。

关于iOS11 在 AVPlayerItemTrack.assetTrack.mediaType (Thread 1 : EXC_BAD_ACCESS (code=1, address=0x0) 上崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46472615/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com