Swift 3 中的 UIImagePickerController
UIImagePickerController in Swift 3
我最近使用开发人员测试版更新到 Swift 3 in Xcode 8。
我正在尝试实施 Firebase Auth,一切顺利。
我的问题:
我正在尝试将图像作为用户的个人资料图片上传到 Firebase 数据库。
我以为我可以使用 UIImagePickerController
来执行此操作,但是当我这样做时,我得到了一个
"Thread 7: Signal 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
开始在 info.plist
文件中为相机和照片库添加 privacy - key
。例如,
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了解更多详情!
参考:
按照 xCode 的错误消息,将 key/value 添加到应用程序的 Info.plist
。
例如,我在开发应用程序时收到一条错误消息。它提醒我将 NSCameraUsageDescription
添加到应用程序的 Info.plist.
来自 xCode
的错误信息
This app has crashed because it attempted to access privacy-sensitive
data without a usage description. The app's Info.plist must contain
an NSCameraUsageDescription key with a string value explaining to the
user how the app uses this data.
还有更多
将key/value
对添加到Localizable.strings
,它将提供i18n
支持。
比如我给Localizable.strings (English)
加一对。当向用户询问相机权限时,它会给出英文描述。
"NSCameraUsageDescription" = "We needs camera permission to capture image.";
我最近使用开发人员测试版更新到 Swift 3 in Xcode 8。 我正在尝试实施 Firebase Auth,一切顺利。
我的问题:
我正在尝试将图像作为用户的个人资料图片上传到 Firebase 数据库。
我以为我可以使用 UIImagePickerController
来执行此操作,但是当我这样做时,我得到了一个
"Thread 7: Signal 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
开始在 info.plist
文件中为相机和照片库添加 privacy - key
。例如,
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了解更多详情!
参考:
按照 xCode 的错误消息,将 key/value 添加到应用程序的 Info.plist
。
例如,我在开发应用程序时收到一条错误消息。它提醒我将 NSCameraUsageDescription
添加到应用程序的 Info.plist.
来自 xCode
的错误信息This app has crashed because it attempted to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSCameraUsageDescription key with a string value explaining to the user how the app uses this data.
还有更多
将key/value
对添加到Localizable.strings
,它将提供i18n
支持。
比如我给Localizable.strings (English)
加一对。当向用户询问相机权限时,它会给出英文描述。
"NSCameraUsageDescription" = "We needs camera permission to capture image.";