Mam aplikację z iOS szybką przy użyciu bazy danych czasu rzeczywistego Firebase. Jeśli normalnie używam aplikacji, nie mogę znaleźć żadnego problemu. Jednak chcę przewidywać przypadki skrajne.Niezgodność liczby kart Firebase w czasie rzeczywistym
Próbuję przetestować moją aplikację przed wypychaniem aktualizacji, a jednym ze sposobów, w jaki to robię, jest szybkie przechodzenie wstecz iz powrotem z VC z tableView do następnego VC, który jest szczegółowym VC. Jeśli zrobię to kilka razy, w końcu widok tabeli pokaże mnóstwo duplikatów danych.
Przetestowałem swoją aplikację, otwierając widok tabeli na moim symulatorze i przechodząc do mojej konsoli Firebase i ręcznie zmieniając wartość i natychmiast na urządzeniu zmieniającym się ciąg.
Jestem więc zdezorientowany, dlaczego mój widok tabeli będzie pokazywał niepoprawną liczbę dzieci, jeśli ciągle sprawdza, jaka powinna być wartość.
// 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()
}
})
}
})
}
Czy muszę użyć Firebase metodę na numberOfItemsInSection czy coś? – RubberDucky4444
Nie jesteśmy pewni, czy widzimy wystarczająco dużo kodu. Rzeczy takie jak viewDid/WillAppear będą pomocne, podobnie jak metody tabel i wszelkie właściwości ustawiającego/pobierającego w tablicy zawierającej dane tabeli. Zwykle, gdy występują problemy z duplikatem danych w tabeli, dzieje się tak, ponieważ tablica danych tabeli nie jest czyszczona przed ponownym załadowaniem. Podczas przechodzenia między dwoma różnymi widokami, wszystko w viewWillAppear, na przykład, będzie wywoływane za każdym razem, gdy przełączysz się z powrotem do widoku tabeli. – C6Silver