Все данные, кроме изображения, отображаемого из fireBase - PullRequest
0 голосов
/ 05 сентября 2018

Я работаю над приложением, пользователь создает учетную запись и загружает изображение в базу данных Firebase, а затем изображение отображается на странице профиля. Кажется, что изображение хорошо хранится в базе данных, но страница профиля не получает изображение, чтобы показать его. Он передает всю остальную информацию на страницу (адрес электронной почты, имя пользователя и т. Д.), Но не изображение профиля.

это код, используемый для сбора данных для отображения на странице профиля:

if let user = DataService.dataService.currentUser {
  username.text = user.displayName
  email.text = user.email
  if user.photoURL != nil {
    if let data = NSData(contentsOf: user.photoURL!){
      self.profileimage!.image = UIImage.init(data: data as Data)
    }
  }
}
else {
  // No user is signed in
}

это код для сохранения изображения в базе данных:

let filepath = "profileimage/\(String(describing: Auth.auth().currentUser!.uid))"
let metadata = FirebaseStorage.StorageMetadata()
metadata.contentType = "image/jpeg"

self.storageRef.child(filepath).putData(data as Data, metadata: metadata, completion: {(metadata, error) in
  if let error = error {
    print ("\(error.localizedDescription)")
    return
  }
)

Заранее спасибо!

1 Ответ

0 голосов
/ 05 сентября 2018

NSData (contentsOf: _) следует использовать ТОЛЬКО для локальных файловых путей, а не для сетевого URL-адреса. Подробнее о причинах здесь: https://developer.apple.com/documentation/foundation/nsdata/1413892-init

Обычно я создаю расширение в UIImageView для загрузки изображений с URL-адресов, вот пример:

extension UIImageView
{
    func loadImageUsingUrlString(_ urlString: String) {

        self.image = nil

        guard let url = URL(string: urlString) else { return }

        URLSession.shared.dataTask(with: url, completionHandler: { (data, response, error) in

            if let error = error {
                print(error)
                return
            }

            DispatchQueue.main.async(execute: {

                if let downloadedImage = UIImage(data: data!) {
                    self.image = downloadedImage
                }
            })
        }).resume()
    }
}

Затем вы можете вызвать его на желаемом изображении:

yourImageView.loadImageUsingUrlString(yourURL)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...