Как преобразовать URL-адрес в NSString при появлении ошибки: можно хранить только объекты типа NSNumber, NSString, NSDictionary? - PullRequest
0 голосов
/ 07 мая 2020

У меня был слишком старый код для обновлений модулей с метаданными:

 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)

                           })

Кто-то предложил следующее исправление, но оно выдает ошибку: Можно хранить только объекты типа NSNumber, NSString, NSDictionary. Теперь я планирую изменить установленное значение и обновить дочерние значения до NSString.

 newImageRef.putData(imageData).observe(.success, handler: {(snapshot) in
              newImageRef.downloadURL { (url, error) in
                guard let downloadURL = url else {
                  return
                }
                newPostRef.setValue(url)
              }
            })



            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 ?? "I am a default value"
                                                      let f1: [String: Any] = [(keyToPost) : newImageRef1.downloadURL as Any]

                                                      newPostRef1.updateChildValues(f1)
                                                    }
                                                  })

1 Ответ

0 голосов
/ 07 мая 2020

Из документации APi для downloadURL видно, что это дает объект URL . У него есть свойство absoluteString , которое вы можете добавить в Firebase.

let f1: [String: Any] = [
    (keyToPost) : downloadURL.absoluteString
]
...