ユーザーがチケットを購入して販売できるアプリを作っています。ユーザーは新しいチケットを作成することができ、正常にfirebaseにアップロードすることができますが、チケットIDへの参照は、チケットデータ内のチケットIDを参照するユーザーデータに格納されます。データベースの構造は以下である:Firebaseからデータを解析するときにUITableView要素を正常にリロードできない
DATABASE
- USERS
- チケット
チケット
- TICKET INFO
USER
- USER INFOチケットのチケットID彼らは私の問題は、私は販売のチケットからチケットをロードする最初の時間は結構ですということです
を販売しています。しかし、ユーザーが販売している新しいチケットを追加すると、テーブルビューはすべてを2回ロードします。
override func viewWillAppear(_ animated: Bool) {
self.tickets = []
DataService.ds.REF_USER_CURRENT.child("selling").observe(.value, with: { (snapshot) in //HERE WE REFERNCE OUR SINGELTON CLASS AND OBSERVE CHAMGE TO THE POSTS OBJECT
self.tickets = [] //WE CLEAR THE POSTS ARRAY BEFORE WE START MANIPULATION TO MAKE SURE THAT WE DONT REPEAT CELLS
if let snapshot = snapshot.children.allObjects as? [DataSnapshot]{
print("ADAM: \(snapshot)")//CHECKING THAT THE OBJECTS EXIST AS AN ARRAY OF DATA SNAPSHOTS
for snap in snapshot {
DataService.ds.REF_TICKETS.child(snap.key).observe(.value, with: { (snapshot) in
if let ticketDict = snapshot.value as? Dictionary<String, AnyObject>{
let ticket = Ticket(ticketID: snap.key, ticketData: ticketDict)
self.self.tickets.append(ticket)
}
self.sell_ticketsTableView.reloadData()
})
}
}
//self.sell_ticketsTableView.reloadData()
self.tickets = []//RELAOD THE DATA
})
}
どこが間違っているのかはわかりません。
私はあなたがしていることを本当に理解していません。このコードは何ですか? "self.self.tickets.append(ticket) "またはこの "self.tickets = []" ??何をすべきかは、データを解析する前にデータソース配列を空にして、同じチケットが何度も現れないようにすることです。 – Siyavash
@Siyavash the self.tickets = []は、データソースとしてデータソース配列をクリアしようとしていますチケットの配列 – KONADO
私の答えを見てください – Siyavash