相机、相册权限请求问题

问题:

在调用相机时,进行了权限请求,发生了Crash。

原因:

在相机权限请求回调中,不在主线程,故唤起UIImagePickerController时发生崩溃。

分析:

1、相机的权限请求

  [AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) {
  //The completion handler is called on an arbitrary dispatch queue. 
//It is the client's responsibility to ensure that any UIKit-related updates are called on the main queue or main thread as a result.
//意思是:completionHandler会在任意队列上执行,我们要确保在主线程中执行。
}

But,为什么测试没有测出来?因为在已经授权时,这个handler会在主线程中执行;

那相册权限呢?

2、相册权限请求

[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
//Photos may call your handler block on an arbitrary serial queue. 
//If your handler needs to interact with UI elements, dispatch such work to the main queue.
//在官方api中的note叙述如上,可知,与相机类似。
 }];

解决:

很简单了,在回掉中,切到主线程中。
PS:附带三种回主线程的方法。
参考:https://blog.csdn.net/cordova/article/details/54933729

// 1.NSThread
[self performSelectorOnMainThread:@selector(updateUI) withObject:nil waitUntilDone:NO];

- (void)updateUI {
}

// 2.NSOperationQueue
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
}];

// 3.GCD
dispatch_async(dispatch_get_main_queue(), ^{
});
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ios 判断用户是否开启权限---并跳转“系统设置” 1.判断 访问相册 或 相机 权限是否开启 2.检测是否开启...
    crzios123阅读 6,766评论 0 2
  • 一、简历准备 1、个人技能 (1)自定义控件、UI设计、常用动画特效 自定义控件 ①为什么要自定义控件? Andr...
    lucas777阅读 5,275评论 2 54
  • 本文就捕获iOS Crash、Crash日志组成、Crash日志符号化、异常信息解读、常见的Crash五部分介绍。...
    xukuangbo_阅读 1,605评论 0 0
  • 在一个方法内部定义的变量都存储在栈中,当这个函数运行结束后,其对应的栈就会被回收,此时,在其方法体中定义的变量将不...
    Y了个J阅读 4,448评论 1 14
  • 五月初,连续两个周末,我都逃离了市区和城镇,躲在大陂田农村老家当起了全职宅男。帮母亲做饭,洗碗,喂鸡,甚至...
    朱二哥的一些事一些情阅读 478评论 3 0