所以这是我的问题。我试图创建一个屏幕,其中有一个UIImageView和一个UIButton。当用户按下按钮时,相机应用程序打开,您拍照,如果您在相机应用程序中按“使用照片”,您将返回到我的应用程序屏幕,并且该照片将放置在我前面提到的UIImageView中。
到目前为止发生的是,当我按下“使用照片”按钮时,图像已正确放置在我的UIImageView中,但是应用程序崩溃并出现以下错误:
该应用已崩溃,因为它尝试访问没有使用说明的隐私敏感数据。
应用程序的Info.plist必须包含一个NSPhotoLibraryAddUsageDescription密钥,该密钥具有字符串值,该字符串值向用户说明该应用程序如何使用此数据。
到目前为止,我所做的是:
将键“隐私-照片库使用说明”放置为值“ $(PRODUCT_NAME)使用库来处理捕获的照片”。在Info.plist文件中(还检查了它如何以“源代码”形式编写,并且根据Apple开发人员文档是正确的)。
还应在Info.plist文件中放置键“隐私-相机使用说明”,其值为“ $(PRODUCT_NAME)使用相机”。
在“目标->->信息->自定义iOS目标属性”下进行检查,并且存在我在步骤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中添加“隐私-照片库添加用途说明”和使用说明(字符串)。
参考:https
:
//developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html
我正在使用flutter为ios和android创建一个应用程序。我需要对ios和android的和permission来访问照片以更新用户个人资料图片。我使用包请求权限。这在Android系统中效果很好,但在ios中效果不佳。 flutter:is granted:false is defined:false is limited:false is restricted:false is per
下面是我的代码:
获取访问攻击是网络渗透测试的第二部分。 在本节中,我们将连接到网络,这将使我们能够发起更强大的攻击并获得更准确的信息。 如果网络不使用加密,我们可以连接到它并嗅出未加密的数据。 如果网络是有线的,我们可以使用电缆并连接到它,可能通过更改我们的MAC地址。唯一的问题是攻击目标使用加密,如WEP,WPA,WPA2。 如果我们确实遇到加密数据,我们需要知道解密它的密钥,这在本章将会学习和实践。 如果网络
问题内容: 我正在使用自定义相机应用程序,本教程使用的是iOS 10弃用的AVCaptureStillImageOutput。我已经设置了相机,现在只能使用如何拍照了。 这是我有相机的全景 这是我需要帮助的地方 我已经在这里回答了如何使用AVCapturePhotoOutput,但是我不明白如何在该代码中合并该代码,因为它涉及到声明一个新类。 问题答案: 你快到了。 查看 文档以获取更多帮助。 这
我是PHP新手,我的任务是使用API从我的客户端获取数据..但问题是,即使在研究和尝试之后,我也无法理解这个API.. 我的客户给了我API的详细信息 这些只是一个虚拟值。我的客户还说,值应该是登录api的令牌响应,前面加上“Bearer”一词 做完研究后..我尝试了此代码,但浏览器上没有显示任何内容。我能做的任何想法或建议.. 我需要把这个放在纽扣上吗?抱歉,如果我在这里问,已经一天了,我不能解
问题内容: 即使使用上述代码将“设置”中的“照片”访问权限设置为“从不”,我仍然可以显示图像选择器并显示照片。我会在显示之前进行检查,但我想知道这是预期的行为吗? 问题答案: 好的,您可以将答案和评论中的一部分拼凑起来,但要尝试讲出更完整的故事… 在iOS 11中,与应用程序分开运行。这意味着: 您的应用看不到用户的整个照片库-它仅对用户在图像选择器中选择的任何资产都具有只读访问权限。 由于(1)