Я использую Firebase Cloud Firestore, загружая изображение из их хранилища в качестве профиля Picture для конкретного пользователя.
Я могу установить изображение для текущего пользователя, который в данный момент вошел в систему, но когда я загружаю и устанавливаю изображение для всех других пользователей в базе данных, значение переменной UIImage для всех пользователей всегда равно нулю в массиве. Все остальные значения для пользователя действительны, поэтому это должно быть что-то с асинхронностью?
Я новичок и ценю, если кто-то может направить меня в правильном направлении.
Раньше я делал это с tableView, и это работало как обаяние, но сейчас я не могу его получить ...
func loadAllUsersFromDB() {
db.collection("users").getDocuments { (snapshot, error) in
if error != nil {
print(error!)
} else {
for document in snapshot!.documents {
if let snapshotValue = document.data() as? [String : Any] {
let userId = snapshotValue["userID"] as? String
if userId == self.currentUID {
self.currentUser.firstName = snapshotValue["firstname"] as? String
self.currentUser.lastName = snapshotValue["lastname"] as? String
self.currentUser.email = snapshotValue["email"] as? String
self.currentUser.uid = snapshotValue["userID"] as? String
self.currentUser.aboutUser = snapshotValue["aboutUser"] as? String
self.currentUser.aboutDog = snapshotValue["aboutUserDog"] as? String
let photoURL = snapshotValue["photoURL"] as? String
if let url = URL(string: photoURL!) {
DispatchQueue.global().async {
let data = try? Data(contentsOf: url)
DispatchQueue.main.async {
self.currentUser.profilePhoto = UIImage(data: data!)
}
}
}
} else {
self.user.firstName = snapshotValue["firstname"] as? String
self.user.lastName = snapshotValue["lastname"] as? String
self.user.email = snapshotValue["email"] as? String
self.user.uid = snapshotValue["userID"] as? String
self.user.aboutUser = snapshotValue["aboutUser"] as? String
self.user.aboutDog = snapshotValue["aboutUserDog"] as? String
let photoURL = snapshotValue["photoURL"] as? String
if let url = URL(string: photoURL!) {
DispatchQueue.global().async {
let data = try? Data(contentsOf: url)
DispatchQueue.main.async {
self.user.profilePhoto = UIImage(data: data!)
}
}
}
self.allUsersArray.append(self.user)
}
}
}
self.checkIfUserIsFriends()
}
self.filterUsersToShow()
}
}
Эта строка кода работает и добавляет загруженную фотографию в currentUser, и я могу установить изображение из currentUser.profilePhoto в imageView на другом ViewController.
let photoURL = snapshotValue["photoURL"] as? String
if let url = URL(string: photoURL!) {
DispatchQueue.global().async {
let data = try? Data(contentsOf: url)
DispatchQueue.main.async {
self.currentUser.profilePhoto = UIImage(data: data!)
}
}
}
}
Но когда я добавляю пользователей в массив, profilePhoto для пользователя всегда равно nil.
let photoURL = snapshotValue["photoURL"] as? String
if let url = URL(string: photoURL!) {
DispatchQueue.global().async {
let data = try? Data(contentsOf: url)
DispatchQueue.main.async {
self.user.profilePhoto = UIImage(data: data!)
}
}
}