UIImagePickerController in Swift 3

你说的曾经没有我的故事 提交于 2019-11-27 04:50:43

问题


I've recently updated to Swift 3 in Xcode 8 using the developer beta. I'm trying to implement Firebase Auth, and everything's going well.

My Problem:

I'm trying to upload an image as a user's profile picture to a Firebase database.

I thought I could use the UIImagePickerController to do this, but when I do, I get a

"Thread 7: Signal SIGABRT

I know what this would normally indicate, but I checked, and my image does indeed print my test statement when I tap it.

My failed method:

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)
}

I'm not sure yet if this is just a problem with Swift 3 and the developer Xcode 8 beta, or if I'm just doing it the wrong way for swift 3.

EDIT:

I'm using the GM Version of xcode8, but still get that same error.


回答1:


I think you need to add privacy - key for camara and photo library in your info.plist file as from xcode 8. for example,

 Key : Privacy - Media Library Usage Description
 Value : YES 

 Key : Privacy - Photo Library Usage Description
 Value : YES 

 Key : Privacy - Camara Usage Description
 Value : YES 

here value is string not Boolean.

so try this.

Check Apple documentation for more details!

Reference : this so post




回答2:


Follow the error message from xCode, and add key/value to Info.plist of application.

For example, I got an error message from my developing app. It reminds me to add NSCameraUsageDescription to app's Info.plist.


The error message from 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.


And MORE

Add key/value pair to Localizable.strings, it will give i18n support. For example, I add a pair to Localizable.strings (English). It will give English description when ask user about camera permission.

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


来源:https://stackoverflow.com/questions/39428916/uiimagepickercontroller-in-swift-3

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!