Firebaseリアルタイムデータベースを使用したiOS迅速アプリケーションがあります。これまでアプリを普通に使っていれば、何の問題も見つけられません。しかし、私はエッジケースを予期したい。Firebaseリアルタイムアレイ数の不一致
私はアップデートをプッシュする前に私のアプリをテストすることを試みています。私がやっていることの1つは、詳細ビューVCである次のVCへのtableViewを持つVCからすぐに行き来しています。私が数回それを行うと、最終的に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か何かにfirebaseメソッドを使用する必要がありますか? – RubberDucky4444
十分なコードが表示されているかわかりません。 viewDid/WillAppearのようなものは、テーブルメソッドと、テーブルデータを含む配列のセッター/ゲッタープロパティと同様に役立ちます。通常、テーブルに重複データの問題がある場合は、テーブルのデータ配列がリロードされる前にクリアされていないためです。異なる2つのビュー間を行き来するとき、たとえば、viewWillAppearの中の何かが、テーブルビューに戻るたびに呼び出されます。 – C6Silver