我有一个使用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