ちょっと私はこのコーディングで助けが必要です、私は何が起こったのか分かりません。先日働いていました。 if let ur; = metaData?.downladURL()
の後にエラーが発生します
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 {
if let url = metaData?.downloadURL() {
completion(url)
} else {
completion(nil)
}
// success!
} else {
// failed
completion(nil)
}
}
}
Firebaseポッドを更新した可能性があります。 Firebase 5.0では、metaData?.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.
storageRef.downloadURL { (url, error) in
guard let downloadURL = url else {
// Uh-oh, an error occurred!
return
}
}
}
Firebase Storage: https://firebase.google.com/docs/storage/ios/upload-files
ポッドを更新して、代わりにこれを置きます:
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)
}
}
}
// MARK: - handleRegister
func handleRegister() {
guard let email = emailTextField.text, let password = passwordTextField.text, let name = nameTextField.text else {
print("Error")
return
}
Auth.auth().createUser(withEmail: email, password: password) { (user, error) in
if error != nil {
// print("Error")
return
}
// MARK: - hadleLogin//
guard let uid = Auth.auth().currentUser?.uid else {
return
}
// MARK: - image successful authenficated user
let imageName = NSUUID().uuidString
let storageRef = Storage.storage().reference().child("profile_images").child("\(imageName).png")
if let profileImageUrl = self.profileImageView.image, let uploadData = UIImageJPEGRepresentation(self.profileImageView.image!, 0.1) {
storageRef.putData(uploadData, metadata: nil, completion: { (metadata, error) in
if error != nil, metadata != nil {
print(error ?? "")
return
}
storageRef.downloadURL(completion: { (url, error) in
if error != nil {
print(error!.localizedDescription)
return
}
if let profileImageUrl = url?.absoluteString {
let values = ["name": name, "email": email, "profileImageUrl": profileImageUrl]
self.registeUserIntoDatabaseWithUID(uid: uid, values: values as [String : AnyObject])
}
})
})
}
}
}
削除ポッドフォルダーのFirebaseStorage。
Xcodeを閉じます。
podFileに移動し、pod 'Firebase/Storage'をpod Firebase/Storage '、'〜> 4.0 'に変更します
保存 podFileを開いて端末
write:pod updateおよびHit enter
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])
})
プロジェクトを実行すると、エラーはなくなります