线程 1:EXC_BAD_ACCESS (code=1, address=0x20) 当 subView

Posted

技术标签:

【中文标题】线程 1:EXC_BAD_ACCESS (code=1, address=0x20) 当 subView【英文标题】:Thread 1: EXC_BAD_ACCESS (code=1, address=0x20) When subView 【发布时间】:2018-06-03 09:56:25 【问题描述】:

我遇到了一个奇怪的错误。 Thread 1: EXC_BAD_ACCESS (code=1, address=0x20) 当一个 View subView 在另一个 view 上时。

两者都是 view object not nil.

我该如何解决这个问题。

编辑: 我正在使用 VOIP 实现视频聊天代码。

来电时和接听电话后。我需要显示一个屏幕。 此屏幕显示正常,其他 UIElements 按钮等(包括按钮功能)一切都按预期进行音频通话。

但是,在收到远程用户视频后的视频通话中,我试图 subView 到 view 。我可以查看远程用户屏幕一秒钟。突然崩溃(线程 1:EXC_BAD_ACCESS (code=1, address=0x20))。

func session(_ session: QBRTCBaseSession, receivedRemoteVideoTrack videoTrack: QBRTCVideoTrack, fromUser userID: NSNumber) 

  if (session as! QBRTCSession).id == self.session?.id 

      let remoteView :QBRTCRemoteVideoView = QBRTCRemoteVideoView()
      remoteView.videoGravity = AVLayerVideoGravity.resizeAspect.rawValue
      remoteView.clipsToBounds = true
      remoteView.setVideoTrack(videoTrack)
      remoteView.tag = userID.intValue

      var frame = self.mainVideoView.bounds
      frame.origin.y = 0
      remoteView.frame = frame

      self.view.addSubview(remoteView)
     

其中receivedRemoteVideoTrack 函数是远程视频的委托方法。

【问题讨论】:

某事是nil;您需要编辑您的问题以显示相关代码。 @Paulw11:我已经编辑了这个问题。 这是一个有效的强制转换:(session as! QBRTCSession)? @staticVoidMan:会话类型为“QBRTCSession”。这个条件也成功了,观看视频一秒钟。 崩溃发生在哪几行?设置异常断点 【参考方案1】:

请记住,Metal 仅适用于 A7 处理器或更高版本。我可以建议你强制使用OpenGLES 绘图而不是Metal,现在,只需这样做:

QBRTCRemoteVideoView.preferMetal = NO

【讨论】:

感谢您的帮助。工作正常。 :) 有一个奇怪的行为,有时这条线会崩溃,QBRTCRemoteVideoView.preferMetal = NO。没有这个就很好。 (同一设备)

以上是关于线程 1:EXC_BAD_ACCESS (code=1, address=0x20) 当 subView的主要内容,如果未能解决你的问题,请参考以下文章

如何修复线程 1:EXC_BAD_ACCESS (code=1, address=0x58) xcode

我的动态数组有问题 - 线程 1:EXC_BAD_ACCESS (code=1, address=0x0)

Swift 在访问 NSManagedObject 的属性时给出错误线程 1:EXC_BAD_ACCESS(code=1, address=0x0)

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

线程 1:EXC_BAD_ACCESS (code=1, address=0x0) 在 swift 中工作时尝试登录到 spotify

GMSGeocoder 在通知服务扩展 iOS 中给出线程 5: EXC_BAD_ACCESS (code=1, address=0x0)