Я знаю, что это потому, что StorageMetadata больше не используется. Я видел другие общие ответы c на похожие вопросы, указывающие на эту документацию по базе данных: https://firebase.google.com/docs/storage/ios/upload-files Я пытался применить его к своему коду, но он не работает. Как мне применить его к моей текущей функции?
{
let uid = Auth.auth().currentUser!.uid
let newPostRef = Database.database().reference().child("people").child(uid).child("PhotoPosts")
let newPostRef1 = Database.database().reference().child("people").child(uid).child("PhotoPosts1")
let newPostKey = newPostRef.key
if let imageData = image.jpegData(compressionQuality: 0.001){
let imageStorageRef = Storage.storage().reference().child("images").child(uid)
let newImageRef = imageStorageRef.child(newPostRef.key!)
let newImageRef1 = imageStorageRef.child(newPostRef1.key!)
newImageRef.putData(imageData).observe(.success, handler: {(snapshot) in
self.imageDownloadURL = snapshot.metadata?.downloadURL()?.absoluteString
newPostRef.setValue(self.imageDownloadURL as Any)
})
newImageRef1.putData(imageData).observe(.success, handler: {(snapshot) in
self.imageDownloadURL = snapshot.metadata?.downloadURL()?.absoluteString
let keyToPost = Database.database().reference().child("people").child(uid).childByAutoId().key
let f1: [String: Any] = [(keyToPost) : self.imageDownloadURL as Any]
newPostRef1.updateChildValues(f1)
})
let caption = ServerValue.timestamp() as! [String : Any]
Database.database().reference().child("people").child(uid).child("caption").setValue(caption)
}
}
Как я уже упоминал, я попытался применить документацию firebase к своей функции, как показано ниже. Это все еще дает в основном ту же ошибку. Куда я иду не так?
func save() {
let uid = Auth.auth().currentUser!.uid
let newPostRef = Database.database().reference().child("people").child(uid).child("PhotoPosts")
let newPostRef1 = Database.database().reference().child("people").child(uid).child("PhotoPosts1")
let newPostKey = newPostRef.key
if let imageData = image.jpegData(compressionQuality: 0.001){
let imageStorageRef = Storage.storage().reference().child("images").child(uid)
let newImageRef = imageStorageRef.child(newPostRef.key!)
let newImageRef1 = imageStorageRef.child(newPostRef1.key!)
newImageRef.downloadURL { url, error in
if let error = error {
} else {
newImageRef.putData(imageData).observe(.success, handler: {(snapshot) in
self.imageDownloadURL = snapshot.metadata?.downloadURL()?.absoluteString
newPostRef.setValue(self.imageDownloadURL as Any)
})
// Here you can get the download URL for 'simpleImage.jpg'
}
}
....
ОБНОВЛЕНИЕ после первого ответа: это то, что я пробовал для двойной записи базы данных:
newImageRef1.putData(imageData).observe(.success, handler: {(snapshot) in
newImageRef1.downloadURL { (url, error) in
guard let downloadURL = url else {
return
}
let keyToPost = Database.database().reference().child("people").child(uid).childByAutoId().key
let f1: [String: Any] = [(keyToPost) : self.imageDownloadURL as Any]
newPostRef1.updateChildValues(f1)
}
})
Я получаю следующую ошибку при let f1: Cannot convert value of type 'String?' to expected dictionary key type 'String'