最近再做一个TVOS项目,有一个需求是收到安卓发送的指定的UDP数据,然后播放视频,于是就开始了下面的工作
自定义了一个控制器,用来存放AVPlayerLayer的layer,然后给了一个类方法去获得自定义控制器的实例。用presentVIewController的方法推出控制器,在新的工程里一切都OK,但是当吧自定义控制器拖到项目中,问题就来了。一下是遇到的问题,以及解决办法
- 在推出控制器的时候报了错误信息待添加
- 只因为收到了两次UDP,而我用的static申请的实例,所以导致两只present的viewCOntroller是同一个,所以报了以上错误
- 解决方法:判断当前控制器是否已经推出,如果是,则不再推出,但是又觉得这样判断太麻烦了,于是用了@try @catch来推出控制器,如果推出失败会走下面的方法,不会报错当然这不是解决问题的根本方法,还望大神可以提出宝贵的意见
- 在切换视频的时候,移除了正在播放视频的layer,添加了新的layer,但是视频的图像是在大概5S后才出现的,知道是多线程的问题,可是添加layer方法是在主线程添加的,于是就改为异步为同步,还是不行,最后又看了一遍自己的代码,觉得是layer 的frame设置的问题,原来的设置是在添加后设置的,改为添加前设置, 一切OK
期间尝试直接在keyWindow上添加视频的layer,但是在移除layer的时候,发现不能收到UDP的数据了,后来经测试发现,是因为在移除layer的时候实在主线程同步执行的,导致线程阻塞了。
总结:
- 对于很多人来说,这都不是什么问题,但是讲真,这折磨了我好几天,同事也总结了几点
- 如果按照正常逻辑来做的而出现的问题,首先就应该检查代码的顺序,就如我上面遇到的frame设置前后的问题
- 尽量不要再主线程同步执行任务
- 遇到问题多百度,百度不行Google,实在不行再向大神请教。
- 同事,在这里感谢群友热心的帮助,最然你们不一定看到这个博客