我注意到我的应用程序没有请求使用相机的权限。经过一些实验,我发现用于检查权限的代码片段需要很长时间才能完成。所以我想让我的viewdidload的那部分运行在串行队列(sync)上。在开始下一行之前强制其余部分等待auth进程完成。但这并没有真正起作用。这些行按顺序开始,但仍然没有按顺序完成。
奇怪的是,如果我只是要求许可并且不做任何操作,没有completionHandler(比如下面的代码)那么他确实第二次运行完成完成后运行完成,尽管它仍然没有' t向用户显示警报。这可能是因为录制视频在欧洲不需要许可吗? avcapturedevice ref
如果我想逐行执行代码,我是否需要使用障碍?或同步串行队列或??
AVCaptureDevice.requestAccessForMediaType(AVMediaTypeVideo, completionHandler: { nil }())
更新
这种方法应该是非常安全的,但它不是。它返回true表示理所当然,但对于rawValue(拒绝)
则返回3func checkForAuthorizationStatus() {
println("auth me")
AVCaptureDevice.requestAccessForMediaType(AVMediaTypeVideo, completionHandler: {
granted in
if granted {
println("granted: \(granted)")
self.deviceAuthorized = true
println("raw value: \(AVCaptureDevice.authorizationStatusForMediaType(AVMediaTypeVideo).rawValue)")
} else {
self.deviceAuthorized = false
}
})
}
更新2:在下面的评论中回答。 - 重置设备上的隐私设置以获取请求。
答案 0 :(得分:7)
如果需要很长时间才能显示,那么听起来你并没有在主线程上运行它,你应该这样做。此外,如果它曾提示过一次,则不会再次提示 - 用户必须进入“设置”并启用摄像头访问。