我有一個使用Firebase實時數據庫的iOS快速應用程序。如果我通常到目前爲止使用該應用程序,我找不到任何問題。但是,我想預測邊緣情況。Firebase實時陣列計數不匹配
我試圖在我推送更新之前測試我的應用程序,而且我正在做的一種方式是快速地從具有tableView的VC到來到VC,這是一個詳細的VC。如果我做了幾次,最終tableview會顯示大量重複的數據。
我已經通過在我的模擬器上打開tableview並進入我的Firebase控制檯並手動更改值並在設備上即時更改字符串來測試了我的應用程序。
所以我很困惑,爲什麼我的tableview會顯示不正確的孩子數量,如果它不斷檢查值應該是什麼。
// 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()
}
})
}
})
}
我需要使用的numberOfItemsInSection或東西火力方法? – RubberDucky4444
不確定我們看到了足夠的代碼。諸如viewDid/WillAppear之類的東西對於表格方法和包含表格數據的數組上的任何setter/getter屬性都會有所幫助。通常,當表中存在重複數據的問題時,這是因爲表的數據數組在重新加載之前未被清除。當您在兩個不同視圖之間來回切換時,例如,每當您切換回表視圖時,都會調用viewWillAppear中的任何內容。 – C6Silver