加载AVPlayer时出现错误线程1:EXC_BAD_ACCESS(代码= EXC_I386_GPFLT)

莫希特

选择collectionViewCell时,我试图加载AVPlayer,这是我的代码didSelectItem

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

    if let item = items?[indexPath.item] {
        showPlayer(item: item)
    }
}

func showPlayer(item: Item) {

    let playerLauncher = PlayerLauncher()
    playerLauncher.showVideoPlayer()

    let playerView = PlayerView()
    playerView.item = item
    playerView.setupPlayerView()
}

这是我的PlayerLauncher文件:

class PlayerView: UIView {

    var item: Item? {
        didSet {
            if let id = item?.itemId {
               itemId = id
            } 
        }
    }

    var itemId = String()

    override init(frame: CGRect) {
        super.init(frame: frame)

        backgroundColor = UIColor(white: 0.3, alpha: 1)
    }

    var player: AVPlayer?

    func setupPlayerView() {

        let baseurl = "http://xample.com/play.m3u?id="

        let urlString = "\(baseurl)\(itemId)"
        print(urlString)
        if let url = URL(string: urlString) {
            player = AVPlayer(url: url)

            let playerLayer = AVPlayerLayer(player: player)
            self.layer.addSublayer(playerLayer)
            playerLayer.frame = self.frame

            let audioSession = AVAudioSession.sharedInstance()
            do{
                try audioSession.setCategory(AVAudioSessionCategoryPlayback)
            } catch let err {
                print(err)
                return
            }

            player?.play()

            player?.addObserver(self, forKeyPath: "currentItem.status", options: .new, context: nil)
        }
    }
}

class PlayerLauncher: NSObject {

    func showVideoPlayer() {
        print("Showing the player...")

        if let keyWindow = UIApplication.shared.keyWindow {
            let view = UIView(frame: keyWindow.frame)
            view.backgroundColor = UIColor.white

            view.frame = CGRect(x: keyWindow.frame.width - 10, y: keyWindow.frame.height - 10, width: 10, height: 10)

            let playerFrame = CGRect(x: 0, y: 0, width: keyWindow.frame.width, height: keyWindow.frame.height)
            let playerView = PlayerView(frame: playerFrame)
            view.addSubview(playerView)

            keyWindow.addSubview(view)

            UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseOut, animations: {
                view.frame = keyWindow.frame
            }, completion: { (completedAnimation) in
                //later...

            })
        }
    }
}

因此,每当我选择该项目时,播放器就会开始加载,控制台会打印URL(因为我已经在其中添加了print语句),这就是它的输出:

http://xample.com/play.m3u?id=12345
(lldb)

然后崩溃,并Thread 1: EXC_BAD_ACCESS (code=EXC_I386_GPFLT)在AppDelegate中显示错误。我该如何解决?

谢谢。

更新:

我改变了didSelectItem功能。这是代码:

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

    if let item = items?[indexPath.item] {
        showPlayer(item: item)
    }
}

func showPlayer(item: Item) {
    let playerLauncher = PlayerLauncher()
    playerLauncher.showPlayer(item: item)
}

我将init方法更改PlayerView为此:

var item: Item? {
    didSet {
        if let id = item?.itemId {
            itemId = id
        }
    }
}

init(frame: CGRect, item: Item) {
    super.init(frame: frame)
    self.item = item

    setupPlayerView()
    setupContainerView()
    backgroundColor = UIColor(white: 0.3, alpha: 1)
}

以及所需的更改PlayerLauncher

let playerView = PlayerView(frame: playerFrame, item: item)
view.addSubview(playerView)

我在let playerView网上稍事休息,可以看到Id传递到那里的项目。但是它没有传递给PlayerView类中的urlString 因此,ID仍为" "

我制作了一份指南,希望能说明您的误解。

对于未使用MARKDOWN文本格式的其他读者,我深表歉意,但请确保这是我对原始海报的最大尝试。在上一篇文章中,我们已经进行了充分的讨论。

在此处输入图片说明

那么,您如何解决呢?我想直接给您提供代码没有什么好处,请尝试根据此信息修复代码。

如果您还有其他问题,我会尽力为您提供帮助:)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

OpenGL:线程1:EXC_BAD_ACCESS(代码= EXC_I386_GPFLT)

来自分类Dev

可变函数中的错误“线程1:EXC_BAD_ACCESS(code = EXC_I386_GPFLT)”

来自分类Dev

错误:“线程1:EXC_BAD_ACCESS(Code = EXC_I386_GPFLT)

来自分类Dev

严重错误:线程1:EXC_BAD_ACCESS(代码= EXC_I386_GPFLT)。我的代码无法运行

来自分类Dev

无法以编程方式设置 UITableView 单元 - 线程 1:EXC_BAD_ACCESS(代码=EXC_I386_GPFLT)

来自分类Dev

C中的预遍历问题:线程1:EXC_BAD_ACCESS(代码= EXC_I386_GPFLT)

来自分类Dev

尝试从字符串打印时出现错误:异常:EXC_BAD_ACCESS (code=EXC_I386_GPFLT)

来自分类Dev

单击按钮时EXC_BAD_ACCESS EXC_I386_GPFLT

来自分类Dev

EXC_BAD_ACCESS (code=EXC_I386_GPFLT) 当 deleteRows(at: [IndexPath])

来自分类Dev

在向我的结构添加属性后获取线程 10:EXC_BAD_ACCESS (code=EXC_I386_GPFLT)

来自分类Dev

为什么在回调指针指向函数时使用EXC_BAD_ACCESS(code = EXC_I386_GPFLT)?

来自分类Dev

错误代码?线程1:EXC_BAD_ACCESS(代码= EXCi386_GPFLT)

来自分类Dev

线程1:EXC_BAD_ACCESS(代码= 1,地址=)iOS

来自分类Dev

错误:线程1:EXC_BAD_ACCESS(代码= 1,地址= 0x0)

来自分类Dev

插入 NSManagedObject 时出现 EXC_BAD_ACCESS 错误

来自分类Dev

使用数组时无法找出“线程1:EXC_BAD_ACCESS”错误

来自分类Dev

CGImageRef出现EXC_BAD_ACCESS错误

来自分类Dev

我的动态数组出现问题-线程1:EXC_BAD_ACCESS(代码= 1,地址= 0x0)

来自分类Dev

变得奇怪线程1:EXC_BAD_ACCESS(代码= 1,地址= 0x9)崩溃错误迅速

来自分类Dev

iOS图表错误:线程1:EXC_BAD_ACCESS(代码= 2,地址= 0x2a0c220)

来自分类Dev

线程1:EXC_BAD_ACCESS(代码= 1,地址= 0xf1759018)

来自分类Dev

线程1:EXC_BAD_ACCESS代码= 1浮点数*

来自分类Dev

线程 1:EXC_BAD_ACCESS(代码=1,地址=0x8000000000000010)

来自分类Dev

线程1:EXC_BAD_ACCESS(代码= 1,地址= 0x20)当subView

来自分类Dev

场景视点线程1:EXC_BAD_ACCESS(代码=1,地址=0x0)

来自分类Dev

OpenGL-glGenVertexArrays,“线程1:exc_bad_access(代码= 1,地址= 0x0)”

来自分类Dev

线程 1:EXC_BAD_ACCESS(代码=1,地址=0x0)xCode C++

来自分类Dev

线程1:EXC_BAD_ACCESS(代码= 1,地址= 0x40)

来自分类Dev

线程1:EXC_BAD_ACCESS(代码= 1,地址= 0x48)avaudiofoundation

Related 相关文章

  1. 1

    OpenGL:线程1:EXC_BAD_ACCESS(代码= EXC_I386_GPFLT)

  2. 2

    可变函数中的错误“线程1:EXC_BAD_ACCESS(code = EXC_I386_GPFLT)”

  3. 3

    错误:“线程1:EXC_BAD_ACCESS(Code = EXC_I386_GPFLT)

  4. 4

    严重错误:线程1:EXC_BAD_ACCESS(代码= EXC_I386_GPFLT)。我的代码无法运行

  5. 5

    无法以编程方式设置 UITableView 单元 - 线程 1:EXC_BAD_ACCESS(代码=EXC_I386_GPFLT)

  6. 6

    C中的预遍历问题:线程1:EXC_BAD_ACCESS(代码= EXC_I386_GPFLT)

  7. 7

    尝试从字符串打印时出现错误:异常:EXC_BAD_ACCESS (code=EXC_I386_GPFLT)

  8. 8

    单击按钮时EXC_BAD_ACCESS EXC_I386_GPFLT

  9. 9

    EXC_BAD_ACCESS (code=EXC_I386_GPFLT) 当 deleteRows(at: [IndexPath])

  10. 10

    在向我的结构添加属性后获取线程 10:EXC_BAD_ACCESS (code=EXC_I386_GPFLT)

  11. 11

    为什么在回调指针指向函数时使用EXC_BAD_ACCESS(code = EXC_I386_GPFLT)?

  12. 12

    错误代码?线程1:EXC_BAD_ACCESS(代码= EXCi386_GPFLT)

  13. 13

    线程1:EXC_BAD_ACCESS(代码= 1,地址=)iOS

  14. 14

    错误:线程1:EXC_BAD_ACCESS(代码= 1,地址= 0x0)

  15. 15

    插入 NSManagedObject 时出现 EXC_BAD_ACCESS 错误

  16. 16

    使用数组时无法找出“线程1:EXC_BAD_ACCESS”错误

  17. 17

    CGImageRef出现EXC_BAD_ACCESS错误

  18. 18

    我的动态数组出现问题-线程1:EXC_BAD_ACCESS(代码= 1,地址= 0x0)

  19. 19

    变得奇怪线程1:EXC_BAD_ACCESS(代码= 1,地址= 0x9)崩溃错误迅速

  20. 20

    iOS图表错误:线程1:EXC_BAD_ACCESS(代码= 2,地址= 0x2a0c220)

  21. 21

    线程1:EXC_BAD_ACCESS(代码= 1,地址= 0xf1759018)

  22. 22

    线程1:EXC_BAD_ACCESS代码= 1浮点数*

  23. 23

    线程 1:EXC_BAD_ACCESS(代码=1,地址=0x8000000000000010)

  24. 24

    线程1:EXC_BAD_ACCESS(代码= 1,地址= 0x20)当subView

  25. 25

    场景视点线程1:EXC_BAD_ACCESS(代码=1,地址=0x0)

  26. 26

    OpenGL-glGenVertexArrays,“线程1:exc_bad_access(代码= 1,地址= 0x0)”

  27. 27

    线程 1:EXC_BAD_ACCESS(代码=1,地址=0x0)xCode C++

  28. 28

    线程1:EXC_BAD_ACCESS(代码= 1,地址= 0x40)

  29. 29

    线程1:EXC_BAD_ACCESS(代码= 1,地址= 0x48)avaudiofoundation

热门标签

归档