使用ImagePickerController創建帶有圖像上傳器的Firebase表單。我正在嘗試創建一個函數將照片上傳到firebase並將uid存儲到相關數據庫。無法從VC控制器訪問功能 - 無法在實例上使用類型
我在使用/訪問函數時遇到了一些問題。
編譯錯誤: - 實例構件 'uploadImageToFirebaseAndReturnImageURL' 不能在類型一起使用 '的DataService';你的意思是使用這種類型的值嗎? - 實例成員'updateUserWithProfileImageURL'不能用於'DataService'類型;你的意思是使用這種類型的值嗎?
的代碼結構化控制器: 「createActivityVC」,服務 「的DataService」,擴展名: 「ImageUploader」
createActivityVC:
import UIKit
import Firebase
class createActivityVC: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func addPictureBtnWasPressed(_ sender: Any) {
imagePicker()
}
}
擴展:ImageUploader
import UIKit
extension createActivityVC: UIImagePickerControllerDelegate, UINavigationControllerDelegate{
func imagePicker() {
let picker = UIImagePickerController()
picker.delegate = self
picker.allowsEditing = true
present(picker, animated: true, completion: nil)
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
var selectedImageFromPicker: UIImage?
if let editedImage = info[UIImagePickerControllerEditedImage] as? UIImage {
selectedImageFromPicker = editedImage
}
if let originalImage = info[UIImagePickerControllerOriginalImage] as? UIImage {
selectedImageFromPicker = originalImage
}
let uid = DataService.uploadImageToFirebaseAndReturnImageURL("profileimage", selectedImageFromPicker)
DataService.updateUserWithProfileImageURL()
}
func imagePickerCancelBtnWasPressed(picker: UIImagePickerController) {
print("Picker cancel button clicked")
self.dismiss(animated: true, completion: nil)
}
}
服務:DataServ冰
import Foundation
import Firebase
let DB_BASE = Database.database().reference() // gets the database URL from Firebase
let storage = Storage.storage() // Get a reference to the storage service using the default Firebase App
let DB_STORE = storage.reference() // Create a storage reference from our storage service
class DataService {
static let instance = DataService()
// static is used to make it a singleton class - meaning it is accessible to all other class
private var _REF_BASE = DB_BASE
private var _REF_USERS = DB_BASE.child("users")
private var _REF_CLUBS = DB_BASE.child("clubs")
private var _REF_ACTIVITY = DB_BASE.child("activities")
private var _REF_PROFILEIMAGES = DB_STORE.child("profileimages")
private var _REF_MEDIA = DB_STORE.child("media")
var REF_BASE: DatabaseReference {
return _REF_BASE
}
var REF_USERS: DatabaseReference {
return _REF_USERS
}
var REF_CLUBS: DatabaseReference {
return _REF_CLUBS
}
var REF_ACTIVITY: DatabaseReference {
return _REF_ACTIVITY
}
var REF_PROFILEIMAGES: StorageReference {
return _REF_PROFILEIMAGES
}
var REF_MEDIA: StorageReference {
return _REF_MEDIA
}
func uploadImageToFirebaseAndReturnImageURL(directory: String, image: UIImage!, handler: @escaping(_ imageURL: (ImageURL)) ->()) {
let imageName = NSUUID().uuidString // create unique image name
if let uploadData = UIImagePNGRepresentation(image) {
DB_STORE.child(directory).putData(uploadData, metadata: nil, completion: { (metadata, error) in
if error != nil {
print(error)
return
}
if let profileImageUrl = metadata?.downloadURL()?.absoluteString {
let d = ImageURL(imageURL: profileImageUrl)
handler (d)
}
return
})
}
}
func updateUserWithProfileImageURL(uid: String, imageURL: String){
REF_USERS.child(uid).child("profileImage").setValue(imageURL)
}
}