Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 类型为'的值;存储元数据&x27;没有成员';下载URL';_Swift_Firebase_Firebase Storage - Fatal编程技术网

Swift 类型为'的值;存储元数据&x27;没有成员';下载URL';

Swift 类型为'的值;存储元数据&x27;没有成员';下载URL';,swift,firebase,firebase-storage,Swift,Firebase,Firebase Storage,嘿,我需要这个编码的帮助,我不知道发生了什么。前几天它还在工作。如果let ur;=元数据?.downladURL() 您可能已经更新了Firebase吊舱。在Firebase 5.0中,他们去掉了元数据?.downladURL()函数。你必须关注他们网站上更新的文档。从那里复制: // Data in memory let data = Data() // Create a reference to the file you want to upload let riversRef = st

嘿,我需要这个编码的帮助,我不知道发生了什么。前几天它还在工作。如果let ur;=元数据?.downladURL()


您可能已经更新了Firebase吊舱。在Firebase 5.0中,他们去掉了
元数据?.downladURL()
函数。你必须关注他们网站上更新的文档。从那里复制:

// Data in memory
let data = Data()

// Create a reference to the file you want to upload
let riversRef = storageRef.child("images/rivers.jpg")

// Upload the file to the path "images/rivers.jpg"
let uploadTask = riversRef.putData(data, metadata: nil) { (metadata, error) in
  guard let metadata = metadata else {
    // Uh-oh, an error occurred!
    return
  }
  // Metadata contains file metadata such as size, content-type.
  let size = metadata.size
  // You can also access to download URL after upload.
  riversRef.downloadURL { (url, error) in
    guard let downloadURL = url else {
      // Uh-oh, an error occurred!
      return
    }
  }
}

Firebase存储:

更新您的POD,并将其改为:

func uploadProfileImage(_ image:UIImage, completion: @escaping ((_ url:URL?)->())) {
    guard let uid = Auth.auth().currentUser?.uid else { return }
    let storageRef = Storage.storage().reference().child("user/\(uid)")

    guard let imageData = UIImageJPEGRepresentation(image, 0.75) else { return }

    let metaData = StorageMetadata()
    metaData.contentType = "image/jpg"

    storageRef.putData(imageData, metadata: metaData) { metaData, error in
        if error == nil, metaData != nil {

            storageRef.downloadURL { url, error in
                completion(url)
                // success!
            }
            } else {
                // failed
                completion(nil)
            }
        }
    }

删除pod文件夹中的FirebaseStorage。
关闭Xcode。
转到podFile,将pod“火基/存储”更改为pod火基/存储,“~>4.0”
保存播客文件并打开终端
写入:pod更新点击输入
打开Xcode并写入以下内容:

if let profileImg     = self.selectedImage, let photoData = profileImg.jpegData(compressionQuality:0.1) {
                storageRef.putData(photoData, metadata: nil, completion: { (metadata, error) in
                    if error != nil  {
                        return
                    }

                   let profileImageUrl = metadata?.downloadURL()?.absoluteString
                    let ref                 = Database.database().reference()
                    let usersReference      = ref.child("user")

                    let newUserReference    = usersReference.child(uid!)
                    newUserReference.setValue(["username" :self.usernameTextField.text!, "email" :self.emailTextField.text!, "ProfileImageUrl":profileImageUrl])
                })

运行该项目,错误将消失

请添加一些描述,以及它只是我还是我为什么需要下载图像以获得公共URL?什么是真正大的文件?这可能是一个正确的答案,但是提供代码的额外解释会很有用,这样开发人员就可以理解您的推理。这对于可能不熟悉语法的新开发人员特别有用。您介意用其他详细信息更新您的评论吗?不编译。downloadURL是一个异步函数,不是一个属性。使用它来降级框架似乎不是一个好的解决方案。如果您降级框架,将来会出现什么问题?是我还是我需要下载映像来获得公共URL?什么是真正大的文件?这将花费双倍的时间。是我自己还是我需要下载图片来获取公共URL?什么是真正大的文件?那将需要双倍的时间。
guard let uid = Auth.auth().currentUser?.uid else { return }

let storageRef = Storage.storage().child("user/\(uid)")

storageRef.downloadURL
if let profileImg     = self.selectedImage, let photoData = profileImg.jpegData(compressionQuality:0.1) {
                storageRef.putData(photoData, metadata: nil, completion: { (metadata, error) in
                    if error != nil  {
                        return
                    }

                   let profileImageUrl = metadata?.downloadURL()?.absoluteString
                    let ref                 = Database.database().reference()
                    let usersReference      = ref.child("user")

                    let newUserReference    = usersReference.child(uid!)
                    newUserReference.setValue(["username" :self.usernameTextField.text!, "email" :self.emailTextField.text!, "ProfileImageUrl":profileImageUrl])
                })
guard let uid = Auth.auth().currentUser?.uid else { return }

let storageRef = Storage.storage().child("user/\(uid)")

storageRef.downloadURL