iOS 13 - 崩溃的 avPlayer.currentTime().seconds 检查

Posted

技术标签:

【中文标题】iOS 13 - 崩溃的 avPlayer.currentTime().seconds 检查【英文标题】:iOS 13 - Crashed avPlayer.currentTime().seconds check 【发布时间】:2020-03-03 06:26:07 【问题描述】:

由于我可以看到 setuptimer 触发了一个长时间运行的循环,因此在 tick 方法中遇到了崩溃,我正在缓冲来自 web 服务的音频并应用播放/暂停并继续。

func setupTimer()
            NotificationCenter.default.addObserver(self, selector: #selector(self.didPlayToEnd), name: .AVPlayerItemDidPlayToEndTime, object: nil)
            timer = Timer(timeInterval: 0.001, target: self, selector: #selector(myclass.tick), userInfo: nil, repeats: true)
            RunLoop.current.add(timer!, forMode: RunLoopMode.commonModes)
        


@objc func tick()
        if((avPlayer.currentTime().seconds == 0.0) && (isPaused == false)) //crasing in this line because of loop
            seekLoadingLabel.alpha = 1
        else
            seekLoadingLabel.alpha = 0
        

        if(isPaused == false)
            if(avPlayer.rate == 0)
                avPlayer.play()
                //seekLoadingLabel.alpha = 1
            else
                //seekLoadingLabel.alpha = 0
            
        

崩溃报告

Crashed: com.apple.main-thread
0  Myapp                   0x1001e5b84 MyDetailTableViewCell.tick() + 283 (CPObjectDetailTableViewCell.swift:283)  
1  Myapp                   0x1001e5bdc @objc MyTableViewCell.tick() + 4337966044 (<compiler-generated>:4337966044)  
2  Foundation              0x1a729c028 __NSFireTimer + 64  
3  CoreFoundation          0x1a6e3103c __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 28  
4  CoreFoundation          0x1a6e30d78 __CFRunLoopDoTimer + 880  
5  CoreFoundation          0x1a6e30448 __CFRunLoopDoTimers + 276  
6  CoreFoundation          0x1a6e2b584 __CFRunLoopRun + 1920  
7  CoreFoundation          0x1a6e2aadc CFRunLoopRunSpecific + 464  
8  GraphicsServices        0x1b0dcb328 GSEventRunModal + 104  
9  UIKitCore               0x1aaf3863c UIApplicationMain + 1936  
10 MyApp                   0x1001a7a60 main + 25 (AppDelegate.swift:25)  
11 libdyld.dylib           0x1a6cb4360 start + 4  

【问题讨论】:

也许您的timeInterval 值有问题?你能把0.001改成1或者比0.001更大的东西吗?我认为这将解决问题。 【参考方案1】:

我已经通过使用可选链接检查 avPlayer 对象的空值来解决这个问题。

if let avPlayerObj = avPlayer 
            print("Contains a value! It is \(avPlayerObj)! execute tick()")

else 
            print("Doesn’t contain a avPlayerObj or nil")
        

【讨论】:

以上是关于iOS 13 - 崩溃的 avPlayer.currentTime().seconds 检查的主要内容,如果未能解决你的问题,请参考以下文章

React Native 应用在 IOS 13 版本设备中崩溃

收到推送通知时 iOS 13 崩溃?

应用程序在后台模式下仅在 iOS 13 上崩溃

ios 版本 13 中的照片库插件崩溃

SwiftUI:在 iOS 14 上点击返回时导航链接崩溃,但在 iOS 13 上没有

将 UIColor 设置为 BackgroundImage 时 ios-13-App 崩溃