【问题标题】:UIImagePickerController in Swift 3Swift 3 中的 UIImagePickerController
【发布时间】:2017-01-18 15:04:39
【问题描述】:

我最近使用开发人员测试版在 Xcode 8 中更新到 Swift 3。 我正在尝试实施 Firebase 身份验证,一切进展顺利。

我的问题:

我正在尝试将图像作为用户的个人资料图片上传到 Firebase 数据库。

我以为我可以使用UIImagePickerController 来执行此操作,但是当我这样做时,我得到了一个

“线程7:信号SIGABRT

我知道这通常表示什么,但我检查了一下,当我点击它时,我的图像确实打印了我的测试语句。

我失败的方法:

ViewController.swift

import UIKit
import Firebase
import Photos

class ViewController: UIViewController, UITextFieldDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate{

@IBOutlet weak var imageView: UIImageView!
@IBOutlet var emailTextField: UITextField!
@IBOutlet var passWordTextField: UITextField!
@IBOutlet var nameTextField: UITextField!

override func viewDidLoad() {
        super.viewDidLoad()

        if FIRAuth.auth()?.currentUser?.uid != nil {
            let storyboard = UIStoryboard(name: "Main", bundle: nil)
            let view = storyboard.instantiateViewController(withIdentifier: "ProfileViewController")
            self.present(view, animated: true, completion: nil)
        }

        imageView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleSelectProfileImageView)))
        imageView.isUserInteractionEnabled = true

        self.emailTextField.delegate = self;
        self.passWordTextField.delegate = self;
        self.nameTextField.delegate = self;
    }

func handleSelectProfileImageView() {
    let picker = UIImagePickerController()

    picker.delegate = self
    picker.allowsEditing = true

    present(picker, animated: true, completion: nil)
}

我还不确定这是否只是 Swift 3 和开发人员 Xcode 8 beta 的问题,或者我只是为 swift 3 做错了。

编辑:

我正在使用 xcode8 的 GM 版本,但仍然遇到同样的错误。

【问题讨论】:

  • 哪一行导致错误?
  • 顺便说一句 - 你不应该再使用 Xcode 8 的 beta 版本。使用 GM 版本。
  • @rmaddy 好的。我会尝试使用GM版本。
  • 哪里出错了?因为您发布的相关代码似乎没问题!你在didFinishPickingMediaWithInfo 中遇到错误吗?
  • @KetanParmar 我很确定它将 UIImagePickerController 呈现为给我错误的视图控制器。

标签: ios uiimagepickercontroller swift3 ios10


【解决方案1】:

我认为您需要在info.plist 文件中为相机和照片库添加privacy - key,从xcode 8 开始。例如,

 Key : Privacy - Media Library Usage Description
 Value : YES 

 Key : Privacy - Photo Library Usage Description
 Value : YES 

 Key : Privacy - Camara Usage Description
 Value : YES 

这里的值是string 而不是Boolean

所以试试这个。

查看Apple documentation了解更多详情!

参考:this so post

【讨论】:

  • 我会在尝试该方法后回复。
  • 这为我修好了!
【解决方案2】:

按照 xCode 的错误消息,将键/值添加到应用程序的 Info.plist

例如,我从正在开发的应用程序中收到一条错误消息。它提醒我将NSCameraUsageDescription 添加到应用的Info.plist。


来自 xCode 的错误信息

此应用已崩溃,因为它试图访问隐私敏感信息 没有使用说明的数据。应用的 Info.plist 必须包含 一个带有字符串值的 NSCameraUsageDescription 键,用于解释 用户应用如何使用这些数据。


还有更多

key/value 对添加到Localizable.strings,它将给予i18n 支持。 例如,我将一对添加到Localizable.strings (English)。询问用户相机权限时会给出英文描述。

"NSCameraUsageDescription" = "We needs camera permission to capture image.";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-12
    • 2018-10-11
    • 1970-01-01
    相关资源
    最近更新 更多