【问题标题】:UIImagePicker Controller doesn't request permission even with plist entryUIImagePicker 控制器即使使用 plist 条目也不会请求权限
【发布时间】:2018-09-21 15:39:11
【问题描述】:

我遇到了 UIImagePickerController 的问题。我希望能够打开照片库并选择一张图片,当我这样做时,我收到以下错误

[discovery] errors encountered while discovering extensions: Error Domain=PlugInKit Code=13 "query cancelled" UserInfo={NSLocalizedDescription=query cancelled}`

我认为这可能是权限错误,因为我错误地没有在我的 plist 中添加一行来访问照片,所以我添加了访问照片库的条目:

Privacy - Photo library Usage Description,类型为string,值设置为photo use

当我尝试访问照片时,仍然没有提示获得访问照片的权限。

为了尽量减少引起问题的任何其他问题,我创建了一个新项目,它只有一个视图控制器和 plist 中的上述条目,下面显示了此类中的唯一代码

class ViewController: UIViewController, UINavigationControllerDelegate, UIImagePickerControllerDelegate
{
    var mImagePicker:UIImagePickerController?

    override func viewDidLoad()
    {
        super.viewDidLoad()
       // Do any additional setup after loading the view, typically from a nib.
    }

    @IBAction func tapped(_ sender: Any)
    {
        // Pick an image from the photo library
        if UIImagePickerController.isSourceTypeAvailable(.photoLibrary)
        {
            mImagePicker = UIImagePickerController()
            mImagePicker!.delegate = self
            mImagePicker!.sourceType = .photoLibrary;
            mImagePicker!.allowsEditing = false
            self.present(mImagePicker!, animated: true, completion: nil)
        }
    }
}

当我点击按钮时,我没有看到权限提示,照片库只是出现,当我选择一张照片时,我收到上面显示的错误?我在这里缺少什么吗?

我在 iPhone X 上运行 iOS 12,在最新版 Mojave beta 上运行 Xcode 10.0

【问题讨论】:

  • 作为注释,如果我添加用于相机访问的 plist 条目并使用 UIImagePickerController 打开相机,它会要求相机许可,这就是为什么我对这个不要求照片许可感到如此困惑的原因跨度>
  • 你实现了uiimagepickercontroller的代理功能吗?
  • 是的,我有,我有 didFinishPickingMediaWithInfo 函数,但是在手动请求权限后,问题实际上似乎在于该函数中 UIImagePickerController 的解除,但它应该仍然只是请求自己的权限正如相机所做的那样,我猜这个问题仍然存在,但错误本身是由于关闭视图
  • 请在您的问题中添加代表代码。您可以使用 didfailpickingmedia 委托并尝试打印错误。
  • @AngryDuck 你添加了Required device capabilitiesvideo-camera 的项目吗?我认为需要添加那个和Privacy...。我不确定它是否能解决问题。

标签: ios swift uiimagepickercontroller


【解决方案1】:

如果您只是在 iOS 11 中使用 UIImagePickerController 访问照片,则实际上不需要权限。使用 AVFoundationPhotos 框架时需要权限。

根据我的经验,iOS 会记录那些我们有时可以忽略的错误,我认为这次您可以忽略错误消息。

【讨论】:

  • 你……确定吗?我需要添加此隐私措施才能使用它。没有它,IIRC,人们可以使用图像选择器,但最终不会真正得到选择的图像。 (请注意,我可能是错的。)
  • 是的 100%。自己试试吧。测试它不需要超过 20 行代码。如果您使用imagePickerController.sourceType = .camera,则需要相机使用权限,但只要您只使用.photoLibrary.savedPhotosAlbum,则不需要任何权限。
  • 谢谢 :),我认为我看到的错误一定与我在选择照片后如何将其关闭有关,但您似乎是正确的权限对于查看无关紧要照片
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-18
  • 2018-11-29
相关资源
最近更新 更多