Повторение того же снимка запроса с внесением тех же данных, несмотря на добавление новых данных в Firestore - PullRequest
0 голосов
/ 02 мая 2019

Я следовал документации, чтобы создать запрос поиска в моей базе данных, чтобы получить максимальные оценки для отображения в tableView.

Однако приведенный ниже код работает, когда добавляется новая (более высокая оценка)в табличном представлении все еще отображаются старые данные запроса.

Например, у меня в базе данных три лучших результата [121, 131, 134].После первого запроса они отображаются правильно.

Затем я продолжаю играть и добавляю еще несколько очков, [121, 131, 134, 234, 432], но те же результаты отображаются в моем табличном представлении [121, 131, 134].

Я ограничиваю свой дисплей тремя пунктами.Так что это должно действительно показать ..... [134, 234, 432].

Я попытался очистить свой tableView с помощью

    scoresArray.removeAll()
    topScoresTableView.reloadData()

(Это вызывается, когда я покидаю VC)Но это не имело никакого эффекта.

class ScoreClass {

let db = Firestore.firestore()


var name = ""
var score = 0

init(withName: String, andScore: Int) {
    name = withName
    score = andScore
}
}

let ref = Database.database().reference()

func retrieveUserData() {

    let postsRef = self.db.collection("users")

    let query = postsRef
                    .whereField("highScore", isGreaterThan: 5000)
                    .order(by: "highScore", descending: false)
                    .limit(to: 3)

    query.getDocuments() { (querySnapshot, err) in
            if let err = err {
                print("Error getting documents: \(err)")
            } else {
                for document in querySnapshot!.documents {
                    print("\(document.documentID) => \(document.data())")
                    let dict = document.data()
                    let name = dict["username"] as! String
                    let score = dict["highScore"] as! Int
                    let aScore = ScoreClass(withName: name, andScore: score)
                    self.scoresArray.insert(aScore, at: 0)
                }
            self.topScoresTableView.reloadData()
            }
    }
}


func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return self.scoresArray.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = topScoresTableView.dequeueReusableCell(withIdentifier: textCellIdentifier, for: indexPath) as! TableViewCell
    let row = indexPath.row
    let scoreClassObject = scoresArray[row]
    let name = scoreClassObject.name
    let score = scoreClassObject.score
    cell.backgroundColor = UIColor.clear
    cell.usernameLabel.text = name
    cell.resultLabel.text = String(score)
    cell.rankNumberLabel.text = "\(indexPath.row + 1)"
    print(scoresArray)
    return cell
}

1 Ответ

1 голос
/ 02 мая 2019

Ваш код не предназначен для получения обновлений в реальном времени от Firestore.Это просто запрос Firestore один раз с помощью getDocuments () .

Вместо этого вам придется изменить код на слушать обновления в реальном времени с помощью addSnapshotListener () , затем обновляйте свой TableView при каждом вызове слушателя, когда со временем меняются результаты запроса.

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