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

2024-02-24

当我选择一个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(因为我在那里添加了打印语句),这就是它打印的内容:

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

然后它崩溃并显示Thread 1: EXC_BAD_ACCESS (code=EXC_I386_GPFLT)AppDelegate 中的错误。我该如何修复它?

Thanks.

UPDATE:

我改变了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。但它没有被传递到 urlStringPlayerView班级。因此,ID仍然是" ".


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

我为没有使用 MARKDOWN 文本格式向其他读者表示歉意,但请将此视为我对原始海报的最大尝试。我们已经在上一篇文章中进行了充分的讨论。

那么,如何解决这个问题呢? 我想直接给你代码没什么好处,请尝试根据这些信息修复代码。

如果您还有更多问题,我会尽力帮助您:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

加载 AVPlayer 时出现错误线程 1:EXC_BAD_ACCESS (code=EXC_I386_GPFLT) 的相关文章

  • UIView的setNeedsLayout、layoutIfNeeded和layoutSubviews之间有什么关系?

    谁能对两者之间的关系给出明确的解释UIView s setNeedsLayout layoutIfNeeded and layoutSubviews方法 以及一个使用所有三个的示例实现 谢谢 让我感到困惑的是 如果我将自定义视图发送给set
  • 场景 - 根据 iPad 或 iPhone 使用专用故事板

    Apple 现在希望我们使用 场景 而不是窗口和屏幕来显示 iPad 和 iPhone 的内容 现在添加了对场景的支持 我似乎失去了使用故事板定位 iPad 或 iPhone 的能力 I set my scenes inside plist
  • SwiftUI withAnimation 完成回调

    我有一个基于某种状态的 swiftUI 动画 withAnimation linear duration 0 1 self someState newState 上述动画完成时是否会触发任何回调 如果有关于如何在 SwiftUI 中使用完成
  • SpriteKit:如何使用混合模式在图层中打孔

    我有一个简单的场景 添加了一些元素 现在我想专注于一个带有遮罩的特定元素 在与我想要关注的元素相同的位置切割整个元素 与我们在某些游戏第一次启动时看到的显示某种教程非常相似 基本上我添加了一个全屏层alpha 0 7 因此用户仍然可以看到所
  • 使用 AVFoundation 快速获取视频帧

    这是我的代码 我想要获取我的视频并将帧数据获取到 SceneKit SCNSphere NSString videoPath NSBundle mainBundle l var videoURL NSBundle mainBundle UR
  • 永远不应该触发嵌套优化。这可能是由于 NSISVariable 委托回调内部发生自动布局工作

    应用程序崩溃了 日志给了我这条消息 永远不应该触发嵌套优化 这可能是由于自动布局工作发生在 NSISVariable 委托回调内 这是不允许的 如何解决这个问题 认为我正在后台线程中更新 UI 尝试放置 if NSThread isMain
  • 相机图像旋转问题

    我在这里面临一个非常奇怪的问题 当我在纵向模式下单击图像并上传它 然后再次获取它时 它会逆时针旋转 90 度显示 但是当我在相机胶卷中看到它时 它会以正确的方向显示 因为它被拍摄 我已经尝试了几乎所有可能的链接 代码来解决这个问题 但似乎没
  • iOS 12.1 上的 UITabBar 项目在返回导航上跳跃

    我有一个 iOS 应用程序UITabBarController在主屏幕上 导航到隐藏的详细信息屏幕UITabBarController有设置hidesBottomBarWhenPushed true 返回主屏幕时UITabBarContro
  • cordova 本地通知声音在 ios 和 Android 中不起作用

    我在用cordova plugin local notifications https github com katzer cordova plugin local notifications插入 现在我在 Android 和 iOS 中获
  • 获取经典蓝牙连接设备列表(无BLE)[EAAccessoryManager]

    我需要制作一个应用程序 能够判断我当前是否连接到经典蓝牙设备 实际上 它将是蓝牙汽车设备 我的第一步是了解当前连接的经典蓝牙设备是什么 我无法使用 CoreBluetooth 因为它仅适用于 LE 我尝试使用外部附件框架 这是代码 一个按钮
  • Vapor MySQL - 未显示为导入值

    这个问题是关于 Swift Web 框架 Vapor 我正在尝试使用 Swift 的包管理器导入 VaporMySQL 框架 我已经在本地运行数据库 mySQL 端口打开并工作 mySQL 数据库正在工作 Vapor 应用程序正在工作 我已
  • 在 Xcode 上创建配置文件

    我正在尝试在 iPhone 上调试应用程序 Xamarin Forms 我已经在我的 Windows PC 上安装了 Visual Studio 我正在其上编写应用程序 并在我的 Mac 上安装了 Visual Studio 和 Xcode
  • 如何测试包含应用程序是否授予“允许完全访问”权限?

    我正在开发一个键盘扩展项目 在应用程序代码的某些点 我需要测试用户是否已授予键盘扩展的 允许完全访问 权限 协议是我需要从应用程序端进行这些测试 并在此基础上让用户访问键盘设置或在未授予权限的情况下提醒他 问题是这里提供的方法如下 func
  • CGContextSaveGState 无效上下文

    我正在开发一个 iOS 应用程序 它使用实时摄像头扫描条形码和二维码 然而有时我会遇到错误 这些错误不会使应用程序崩溃 但修复它们可能是个好主意 这些是错误
  • 我正在使用“DrawLinearGradient”函数来绘制渐变线。但我使用的两种颜色并没有在直线上等分

    我正在使用 DrawLinearGradient 函数来绘制渐变线 但我使用的两种颜色并没有在线条中等分 CGColorSpace colorSpace CGColorSpace CreateDeviceRGB CGColor colors
  • Swift 中构造泛型类型的扩展

    是否可以为专用 构造的泛型类型扩展泛型类 我想用一种方法来扩展 Int Arrays 来计算其元素之和 e g extension Array
  • 在 Swift 3 中从 UUID 获取数据

    我用 Objective C 编写了以下代码 我试图在 Swift 3 中使用它 一些等效函数似乎在 Swift 3 中不可用 下面的代码是 Objective C 中的代码 NSUUID vendorIdentifier UIDevice
  • iPhone 中的视频过滤速度很慢

    我正在尝试在 iPhone 中过滤视频 这是我的程序结构和源代码 AppDelegate h AppDelegate m ViewController h ViewController m AppDelegate 文件与默认文件相同 这是我
  • 如何为现有核心数据实体添加更多属性?

    我有一个正在使用核心数据的项目 我需要向现有实体 列 添加更多属性 列 如果我手动将属性添加到数据模型应用程序崩溃 这是由于我用来将数据插入表的上下文保存之前 请帮助 谢谢 所以我的问题是我不知道这个持久存储协调器代码去了哪里 事实证明它是
  • 可以在 iOS 应用程序中全局禁用旋转吗?

    我有一个由很多视图控制器组成的应用程序 在项目摘要中 我已将纵向方向设置为唯一支持的设备方向 然而 该应用程序在横向旋转时仍然会变得混乱 我的问题是 有没有办法通过应用程序委托或其他方式全局禁用自动旋转 或者我是否必须进入所有视图控制器并添

随机推荐

  • java循环重复程序

    我对 Java 非常陌生 我已经在上课的第二周左右了 我需要我的程序根据用户继续运行或退出 这是一个工资计算 我希望最后说 你想继续吗 y n 我希望 Y 重复我的整个问题程序和不结束程序 我正在使用 Jgrasp 而且我是非常非常新的 我
  • 如何在 FiraCode for Visual Studio 2015 中启用连字

    我下载了 FiraCode 字体 并选择它作为 Visual Studio 中的字体 然而 连字没有显示 并且 wiki 没有针对 Visual Studio 的任何特殊说明 尽管他们暗示它可以工作 因为它列在其 WORKS 列中以提供编辑
  • MySQL仅当查询包装为子查询时出现重复列错误

    我有一个如下所示的选择查询 SELECT FROM A LEFT JOIN B ON B x A y LEFT JOIN C WHERE GROUP BY ORDER BY 所有桌子都有id列和查询运行良好 结果有很多id列没有错误并且驱动
  • ASP.NET [GridView 的水平滚动]

    如何为我的大 GridView 制作水平滚动 尝试包裹一个 div style width 100 div 围绕 GridView
  • 创建独立的 .exe 文件

    我有一个在 Visual Studio 2010 中构建的控制台应用程序 当我实际构建项目时 我在 bin Debug MyProj exe 下获取 exe 文件 当我从其他位置粘贴并运行此 exe 时 它 也需要其他文件 有什么想法我怎样
  • 电子邮件客户端如何处理 cookie?

    假设我在电子邮件中的图像请求上设置了 cookie 因此当用户查看电子邮件中的图像时会设置 cookie 如果用户随后点击电子邮件打开浏览器 浏览器是否可以访问我刚刚设置的 cookie 显然 如果用户将 Outlook 作为电子邮件客户端
  • 可移植类库中的 Thread.Sleep()

    The MSDN文档说Thread Sleep 可以用在portable类库 编译器另有说明 除了自旋循环之外 我还有什么选择 Thread CurrentThread Join 也不存在 项目文件
  • Ajax跨源请求被阻止:同源策略不允许读取远程资源

    我正在编写一个简单的网站 它以习语作为输入 并从牛津词典返回其含义和示例 这是我的想法 我向以下 URL 发送请求 http www oxfordlearnersdictionaries com search english direct
  • 组织项目中文件的最佳方式

    组织项目中文件的最佳方式是什么 例如 您是否将所有用户控件放在单独的文件夹中 还是将它们放在子文件夹中 你有业务逻辑文件夹吗 助手类文件夹 我曾经这样组织我的项目 项目 用户控件 模块名称 项目 课程 模块名称 现在我正在学习更多这样的事情
  • Kohana 3 自动加载模型

    我正在尝试使用模型 但出现致命错误 因此我认为它无法正确自动加载 ErrorException 致命错误 类 未找到 属性 模型 有问题的控制器线路 properties new Properties Model 该模型 class Pro
  • 验证 JIRA 时发生卷曲错误

    curl H Content Type application json charset UTF 8 d username admin password admin http localhost 2990 jira rest auth 1
  • 将 JavaScript 字符串拆分为代码点数组? (考虑“代理对”但不考虑“字素簇”)

    将 JavaScript 字符串拆分为 字符 可以轻松完成 但如果您关心 Unicode 并且您应该关心 Unicode 则会出现问题 JavaScript 本身将字符视为 16 位实体 UCS 2 或 UTF 16 https en wi
  • 指定 JavaScript 正则表达式中的模式重复次数

    我在中使用了正则表达式C 有一种方法可以指定任何模式的重复次数 0 9a zA Z 3 15 上面的正则表达式将检查该模式 0 9a zA Z 将重复 3 至 15 次 当我尝试做同样的事情时JavaScript 这是行不通的 var re
  • 多模块 Gradle 项目 - 从 Spring-Boot 1.5 迁移到 2.1

    我想将多模块 spring boot 1 5 项目迁移到 spring boot 2 1 这是一个 gradle 项目 4 9 但不知何故我没有解决它 使用 spring boot 1 5 9 应用程序编译良好 依赖于其他模块的模块也可以解
  • Ajax工具包AjaxFileUpload抛出异常

    我有一个条目表单 我想添加一个文件上传器 我在母版页中添加了一个工具包脚本管理器 然后我添加了一个ajaxfileupload控件
  • 尝试以各种可能的方式嵌入 SVG 对象,但浏览器在渲染 html 时提示保存文件

    已尝试过 W3 学校列出的所有嵌入方法以及更多方法 即使提供了宽度和高度 资源管理器也会显示不正确的大小 chrome和firefox只是提示下载 使用 Visual Studio 2010 内置的开发服务器 可能需要添加 mime 类型来
  • SQL 查询返回过去 24 小时内每小时的值

    我有一个问题 但我真的不知道如何开始 我希望有人能帮助我解决这个问题 我将从解释该表开始 我有一个包含四列的设备表 Device Id Device Status Begin dt End dt 有 6 种不同的状态 其中 3 为简单起见
  • 正则表达式匹配不在引号内的所有实例

    From this q a https stackoverflow com questions 2700953 a regex to match a comma that isnt surrounded by quotes 我推断匹配给定正
  • C 中的局部变量和静态变量

    编译时 external definitions int value1 0 static int value2 0 gcc 编译器生成以下程序集 globl value1 bss align 4 type value1 object siz
  • 加载 AVPlayer 时出现错误线程 1:EXC_BAD_ACCESS (code=EXC_I386_GPFLT)

    当我选择一个collectionViewCell时 我试图加载一个AVPlayer 这是我的代码didSelectItem func collectionView collectionView UICollectionView didSel