84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
这两个Key设置好之后应该是相册和摄像头都可以调用的 但是现在的情况是相册的弹窗出来之后用户点击不允许就没事 访问相机用户点击不允许就会闪退……第二次进入APP就是正常提醒在隐私里开启授权了。而且第一次出现弹出提示是否允许访问相机点击允许之后很长一段时间的黑屏甚至有的时候并不能打开相机 第二次有了授权之后这个黑屏就消失了 是我少了什么设置吗 相机这个不论点允许还是不允许都有问题
这两种情况遇到过吗?
学习是最好的投资!
遇到了同样的问题。再次重现的时候连到真机调试的时候打了全局断点,结果发现崩溃在设置自定义的alertWindow的frame这句。po了一下发现alertWindow没有出现空指针。那么原因很明显了。在操作UI的时候出现了crash,原因是操作UI没有在主线程。回到代码里看发现调用相机状态的判断
let authStatus = AVCaptureDevice.authorizationStatusForMediaType(AVMediaTypeVideo) switch authStatus { case .NotDetermined: AVCaptureDevice.requestAccessForMediaType(AVMediaTypeVideo, completionHandler: { (granted) in if (granted) { //第一次用户接受 if let tmp = handle { tmp() } }else{ //用户拒绝 *** 问题在这里,如果第一次用户拒绝了,回调并不在主线程。(注意,此时的case分支在用户并未决定里) if let tmp = limitHandle { dispatch_async(dispatch_get_main_queue(), { tmp() }) } } }) case .Restricted: // 无法访问 dLog("没有设备") case .Denied: // 用户拒绝 if let tmp = limitHandle { dispatch_async(dispatch_get_main_queue(), { tmp() }) } case .Authorized: // 开启授权 if let tmp = handle { tmp() } }
把用户第一次决定是否要同意使用相册的地方回调放到主线程,即可解决这个问题。
遇到了同样的问题。
再次重现的时候连到真机调试的时候打了全局断点,结果发现崩溃在设置自定义的alertWindow的frame这句。
po了一下发现alertWindow没有出现空指针。
那么原因很明显了。在操作UI的时候出现了crash,原因是操作UI没有在主线程。
回到代码里看发现调用相机状态的判断
把用户第一次决定是否要同意使用相册的地方回调放到主线程,即可解决这个问题。