gpt4 book ai didi

ios - iOS 11 中的照片捕获权限问题

转载 作者:IT王子 更新时间:2023-10-29 05:15:07 25 4
gpt4 key购买 nike

所以这是我的问题。我正在尝试创建一个屏幕,其中有一个 UIImageView 和一个 UIButton。当用户按下按钮时,相机应用程序打开,您拍摄一张照片,如果您在相机应用程序中按下“使用照片”,您将返回到我的应用程序屏幕,照片将放置在我之前提到的 UIImageView 中。

目前发生的情况是,当我按下“使用照片”按钮时,图像已正确放置在我的 UIImageView 中,但随后应用程序崩溃并出现以下错误:

此应用已崩溃,因为它试图在没有使用说明的情况下访问隐私敏感数据。应用的 Info.plist 必须包含一个 NSPhotoLibraryAddUsageDescription 键和一个向用户解释应用如何使用此数据的字符串值。

到目前为止我所做的是:

  1. 将键“Privacy - Photo Library Usage Description”和值“$(PRODUCT_NAME) 使用 Library 以处理您拍摄的照片”放在一起。在 Info.plist 文件中(还检查了它是如何以源代码形式编写的,并且根据 Apple Developer Documentation 它是正确的)。

  2. 还在 Info.plist 文件中放置值为“$(PRODUCT_NAME) 使用相机”的键“Privacy - Camera Usage Description”。

  3. 在“TARGETS->->Info->Custom iOS Target Properties”下检查,我在步骤 1 和 2 中提到的 2 个键/值对存在。

到目前为止,我将为您提供我的代码:

import UIKit
import Vision
import MobileCoreServices
import AVFoundation
import Photos

class ViewController: UIViewController, UIImagePickerControllerDelegate,
UINavigationControllerDelegate {

var newMedia: Bool?

@IBAction func captureImageButtonPressed(_ sender: Any) {
//let imageName : String = "dolphin"
//randomImageView.image = UIImage.init(named:imageName)

if UIImagePickerController.isSourceTypeAvailable(
UIImagePickerControllerSourceType.camera) {

let imagePicker = UIImagePickerController()

imagePicker.delegate = self
imagePicker.sourceType =
UIImagePickerControllerSourceType.camera
imagePicker.mediaTypes = [kUTTypeImage as String]
imagePicker.allowsEditing = false

self.present(imagePicker, animated: true,
completion: nil)
newMedia = true
}
}

@IBAction func classifyButtonPressed(_ sender: UIButton) {
performVisionRequest()
}
@IBOutlet weak var randomImageView: UIImageView!
@IBOutlet weak var classificationLabel: UILabel!

override func viewDidLoad() {
super.viewDidLoad()
}

override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
}

func performVisionRequest() {
let start = DispatchTime.now()
let model = Resnet50()
let request = VNImageRequestHandler(cgImage: randomImageView.image!.cgImage!, options: [:])
do {
let m = try VNCoreMLModel(for: model.model)
let coreMLRequest = VNCoreMLRequest(model: m) { (request, error) in
guard let observation = request.results?.first as? VNClassificationObservation else { return }
let stop = DispatchTime.now()
let nanoTime = stop.uptimeNanoseconds - start.uptimeNanoseconds
let timeInterval = Double(nanoTime)
self.classificationLabel.text = "\(observation.identifier) (\(observation.confidence * 100)%) in \(timeInterval) seconds."
}
try request.perform([coreMLRequest])
} catch {
print(error)
}
}

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
let mediaType = info[UIImagePickerControllerMediaType] as! NSString
self.dismiss(animated: true, completion: nil)
if mediaType.isEqual(to: kUTTypeImage as String) {
let image = info[UIImagePickerControllerOriginalImage]
as! UIImage
randomImageView.image = image
if (newMedia == true) {
UIImageWriteToSavedPhotosAlbum(image, self,
#selector(ViewController.image(image:didFinishSavingWithError:contextInfo:)), nil)
} else if mediaType.isEqual(to: kUTTypeMovie as String) {
// Code to support video here
}
}
}

@objc func image(image: UIImage, didFinishSavingWithError error: NSErrorPointer, contextInfo:UnsafeRawPointer) {
if error != nil {
let alert = UIAlertController(title: "Save Failed",
message: "Failed to save image",
preferredStyle: UIAlertControllerStyle.alert)
let cancelAction = UIAlertAction(title: "OK",
style: .cancel, handler: nil)
alert.addAction(cancelAction)
self.present(alert, animated: true,
completion: nil)
}
}

func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
self.dismiss(animated: true, completion: nil)
}
}

知道为什么我会以粗体显示上述错误吗?非常感谢您抽出宝贵时间。

最佳答案

NSPhotoLibraryAddUsageDescription 是在 iOS 11 中添加的。

请在 info.plist 中添加“Privacy - Photo Library Additions Usage Description”和使用说明(字符串),就像您为其他隐私权限所做的那样。

引用:https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html

关于ios - iOS 11 中的照片捕获权限问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44527321/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com