Я хочу получить изображение, которое хранится в хранилище пользователя, и поместить его рядом с его именем в пользовательский UITableViewCell. Проблема в том, что tableview будет загружаться, когда изображения не будут загружаться (я думаю?), В результате чего приложение выйдет из строя, потому что массив изображений равен нулю. Итак, каков правильный способ загрузки таблицы? Я думаю, что для удобства пользователей важно, чтобы изображение в виде таблицы было показано, даже если изображения не были загружены, и представить им изображение по умолчанию, которое сохраняется в передачах. Я думал о создании массива с UIImages, который ссылается на объект по умолчанию для загрузки изображения и изменения изображения на изображение профиля, когда он будет загружен. Но я действительно не знаю, как это сделать. Это то, что я до сих пор о загрузке изображения:Добавление изображения из Firebase в UITableViewCell
let storage = FIRStorage.storage()
let storageRef = storage.reference(forURL: "link.appspot.com")
channelRef?.observeSingleEvent(of: .value, with: { (snapshot) in
if let snapDict = snapshot.value as? [String:AnyObject]{
for each in snapDict{
let UIDs = each.value["userID"] as? String
if let allUIDS = UIDs{
let profilePicRef = storageRef.child((allUIDS)+"/profile_picture.png")
profilePicRef.data(withMaxSize: 1 * 500 * 500) { data, error in
if let error = error {
}
if (data != nil)
{
self.playerImages.append(UIImage (data: data!)!)
}
}
}
let userNames = each.value["username"] as? String
if let users = userNames{
self.players.append(users)
}
}
}
self.tableView.reloadData()
})
Это в cellForRow
cell.playersImage.image = playerImages[indexPath.row] as UIImage
Мои правила, не изменили его от правил по умолчанию:
service firebase.storage {
match /b/omega-towers-f5beb.appspot.com/o {
match /{allPaths=**} {
allow read, write: if request.auth != null;
}
}
}
Спасибо.
Мне жаль, что я не включил это в свой код. Я уже инициализировал playerImages, как и вы. Проблема в том, что таблица будет загружаться, когда появится представление, она не будет ждать загрузки изображений. Но опять же, я хочу проверить, содержит ли массив изображение, если нет, представление обычного изображения, которое сохраняется в активах. Я не могу использовать if playerImages! = Nil в cellForRow. – Petravd1994
Я отредактировал свой ответ. Вы можете проверить нуль, просто используя if let statement. если он равен нулю, он не войдет в оператор if. Еще одна вещь, если ваш массив инициализирован и пуст, ваш numberofrowsinSection должен вернуть 0, а cellforrowat IndexPath не даст вам ошибку. –