Космос рейтинг случайно отображается пустым - PullRequest
1 голос
/ 01 февраля 2020

У меня есть collectionView с изображением, меткой и рейтинговой системой представления космоса в каждой ячейке. Рейтинг космоса связан с огненной базой, где оценки для каждого продукта хранятся в виде значения для идентификатора пользователя. Проблема заключается в том, что рейтинг продукта случайным образом отображается как 0 / пусто, когда я оцениваю продукт много раз. В большинстве случаев рейтинг обновляется до правильного нового среднего рейтинга, но иногда он просто отображается пустым и случайным образом фиксируется после того, как я оценил продукт еще несколько раз.

Я создал класс Product, который имеет идентификатор, имя, imageUrl и рейтинг космоса для каждого продукта:

class Product {
var category: String?
var name: String?
var imageUrl: String?
var rating: Double = 0
var id: String?

init(rawData: [String: AnyObject]) {
    id = rawData["id"] as? String
    name = rawData["name"] as? String
    imageUrl = rawData["imageUrl"] as? String
    if let ratingRaw = rawData["ratings"] as? [String: Int] {
        let values = Array(ratingRaw.values)
        var sum = 0
        for item in values {
            sum += item
        }

        rating = Double(sum) / Double(values.count)
    }

  }
}

Кажется, проблема заключается в классе продукта, как я пытался изменить строку кода var rating: Double = 0 на var rating: Double = 3, что устраняет проблему случайного отображения космоса пустым, но вместо этого случайным образом отображается с 3 звездами.

Затем я показываю рейтинг, создавая экземпляр Класс продукта в v c:

var product: Product?
detailCosmosView.rating = product?.rating ?? 0

Пользователь касается рейтинга космоса и нажимает кнопку отправки, этот код обновляет рейтинг пользователя:

    func updateRating(double: Double) {
    guard let userId = Auth.auth().currentUser?.uid else { return }
    guard let category = product?.category, let id = product?.id else { return }
    Database.database().reference()
        .child("Categories")
        .child(category)
        .child(id)
        .child("ratings")
        .child(userId)
        .setValue(double)
}

Есть, казалось бы, нет проблем с этим битом кода.

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