Ich habe eine iOS Swift App, die Firebase Realtime-Datenbank verwendet. Wenn ich die App bisher normal nutze finde ich kein Problem. Ich möchte jedoch Randfälle vorhersehen.Firebase Echtzeit Array-Anzahl stimmt nicht überein
Ich versuche Stress meine App zu testen, bevor ich das Update schiebe, und eine Möglichkeit, die ich tue, geht schnell von einem VC mit einem TableView zum nächsten VC, der ein Detail VC ist. Wenn ich es mehrere Male tue, zeigt die Tabelle schließlich viele doppelte Daten an.
Ich habe meine App getestet, indem ich eine Tabellenansicht auf meinem Simulator geöffnet habe und in meine Firebase-Konsole wechselte und manuell einen Wert änderte und sofort auf dem Gerät die Zeichenfolge änderte.
So bin ich verwirrt, warum mein Tableview würde eine falsche Anzahl von Kindern zeigen, wenn es ständig überprüft, was der Wert sein sollte.
// MARK: Firebase Methods
func checkIfDataExits() {
DispatchQueue.main.async {
self.cardArray.removeAll()
self.ref.observe(DataEventType.value, with: { (snapshot) in
if snapshot.hasChild("cards") {
self.pullAllUsersCards()
} else {
self.tableView.reloadData()
}
})
}
}
func pullAllUsersCards() {
cardArray.removeAll()
let userRef = ref.child("users").child((user?.uid)!).child("cards")
userRef.observe(DataEventType.value, with: { (snapshot) in
for userscard in snapshot.children {
let cardID = (userscard as AnyObject).key as String
let cardRef = self.ref.child("cards").child(cardID)
cardRef.observe(DataEventType.value, with: { (cardSnapShot) in
let cardSnap = cardSnapShot as DataSnapshot
let cardDict = cardSnap.value as! [String: AnyObject]
let cardNickname = cardDict["nickname"]
let cardType = cardDict["type"]
let cardStatus = cardDict["cardStatus"]
self.cardNicknameToTransfer = cardNickname as! String
self.cardtypeToTransfer = cardType as! String
let aCard = CardClass()
aCard.cardID = cardID
aCard.nickname = cardNickname as! String
aCard.type = cardType as! String
aCard.cStatus = cardStatus as! Bool
self.cardArray.append(aCard)
DispatchQueue.main.async {
self.tableView.reloadData()
}
})
}
})
}
Habe ich eine Feuerbasis Methode auf dem numberOfItemsInSection oder etwas verwenden? – RubberDucky4444
Nicht sicher, ob wir genug Code sehen. Dinge wie viewDid/WillAppear wären ebenso hilfreich wie die Tabellenmethoden und alle Setter/Getter-Eigenschaften in dem Array, das die Tabellendaten enthält. Wenn Probleme mit doppelten Daten in einer Tabelle auftreten, liegt dies in der Regel daran, dass der Datenarray der Tabelle vor dem erneuten Laden nicht gelöscht wird. Wenn Sie zwischen zwei verschiedenen Ansichten hin- und hergehen, wird bei jedem Wechsel in die Tabellenansicht beispielsweise in viewWillAppear alles aufgerufen. – C6Silver