Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'An AVPlayerItem ...

這是挺早之前碰到的一個(gè)問題,記在Evernote沒寫出來,今天空了出來閑翻之前筆記時(shí)看到了就寫到這里。

播放相冊視頻崩潰

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'An AVPlayerItem cannot be associated with more than one instance of AVPlayer'

場景是這樣:當(dāng)前列表頁展示相冊里的照片和視頻,tap列表里的某個(gè)視頻進(jìn)入下一級(jí)詳情頁,詳情頁面用AVPlayerItem創(chuàng)建一個(gè)AVPlayer對象,用AVPlayerViewControler播放相冊視頻,開始播放后點(diǎn)擊返回上一級(jí)列表頁,再點(diǎn)擊這個(gè)視頻進(jìn)入詳情頁播放,閃退;假如我返回列表頁換一個(gè)視頻進(jìn)入詳情頁播放,正常播放。AVPlayerItem對象是在列表頁創(chuàng)建然后屬性傳進(jìn)詳情頁,AVPlayer對象是在詳情頁創(chuàng)建的。崩潰信息就是上面的

'*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'An AVPlayerItem cannot be associated with more than one instance of AVPlayer'。

看崩潰信息字面意思就是一個(gè)AVPlayerItem對象不能被放在不同的AVPlayer對象上播放。對應(yīng)我的場景也確實(shí)是這樣,一個(gè)AVPlayerItem對象被不同的AVPlayer對象持有了。問題來了,AVPlayerItem對象是在列表頁創(chuàng)建的,在這個(gè)場景下始終沒有被釋放,AVPlayer對象是在詳情頁創(chuàng)建的,每次返回列表頁AVPlayer對象都已經(jīng)被釋放了,卻依然出現(xiàn)崩潰,猜測是AVPlayerItem對象依然被隱性持有著。這個(gè)問題在iOS 11.0以后的設(shè)備上沒有復(fù)現(xiàn)(我測試了2臺(tái)11.0以后的設(shè)備),在11.0之前的系統(tǒng)必現(xiàn)(測試了3臺(tái)11.0之前的設(shè)備),所以蘋果可能在11.0系統(tǒng)修復(fù)了這個(gè)bug。

我搜了下這個(gè)bug,回復(fù)基本上都是套用這個(gè)提問的回答,大致都是MPMoviePlayerViewController的使用場景,我的問題是AVPlayerViewControler(iOS 8.0之后available)的使用場景。

我解決這個(gè)問題的辦法是把AVPlayer對象的創(chuàng)建也放在列表頁,通過屬性傳進(jìn)詳情頁,利用改變業(yè)務(wù)邏輯的方式替代。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容