これは数時間前です。私の問題の解決策を見つけるためにインターネットフォーラムを掘り下げようとしています。何が起きているのか理解できないので、 )Firebaseデータベース内のデータがobserveSingleEventで2回読み込まれる
私は迅速なアプリケーションを持っています。私のビューコントローラの1つでは、Firebaseデータベースからデータを取得して、それらをテーブルビューに表示したいと考えています。
私のデータがどのように整理されているかを見ることができます。 Firebase org of data
が私のテーブルビュー内の行数を取得するには、私はこのfunc tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
print("Number of contact TV: \(numberOfContact)")
return numberOfContact
}
とTOを持って、行数を取得するには、
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// Count the number contacts to get the correct number of lines in the table
let ref_table = ref.child("users").child((user?.uid)!).child("emergencyContacts")
print("Starting observing")
ref_table.observe(.value, with: { (snapshot: DataSnapshot!) in
print("Got snapshot")
print(snapshot.childrenCount)
let count = snapshot.childrenCount
self.numberOfContact = Int(count)
self.UI_contactsTableView.reloadData()
ref_table.removeAllObservers()
})
print("Returning count")
}
そして、viewWillAppearセクションにこれを入れます私のテーブルビューのセルを埋める
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "contact-cell") as! EmergencyContactCell
print("value of numberOfContact \(numberOfContact)")
ref.child("users").child((user?.uid)!).child("emergencyContacts").observeSingleEvent(of: .value, with: { (snapshot: DataSnapshot) in
print("snapshot value \(snapshot.value!)")
for rest in snapshot.children.allObjects as! [DataSnapshot] {
guard let restDict = rest.value as? [String:Any] else { continue }
let firstName = restDict["contact_firstName"] as? String ?? ""
cell.UI_fullName.text = "\(firstName)"
}
})
return cell
}
そして私はこれが悪い私が何をしていても、私はいつも2セットのデータを表示しているので、私のセルは常にhereと同じ名前で埋められています。
これはプログラム実行後の私のコンソールのキャプチャです。あなたの助けを事前に
Starting observing
Returning count
Number of contact TV: 0
Number of contact TV: 0
Number of contact TV: 0
Got snapshot
2
Number of contact TV: 2
value of numberOfContact 2
value of numberOfContact 2
snapshot value {
1ArkUu6pMPZPgf3pGFAvvxHiTPFaf5Cl = {
"contact_firstName" = Kate;
"contact_lastName" = Bell;
"contact_phoneNumber" = "(555) 564-8583";
};
s8haDrYYAT9Y12ZnmAfE87pDyjDZGwjx = {
"contact_firstName" = Daniel;
"contact_lastName" = Higgins;
"contact_phoneNumber" = "555-478-7672";
};
}
snapshot value {
1ArkUu6pMPZPgf3pGFAvvxHiTPFaf5Cl = {
"contact_firstName" = Kate;
"contact_lastName" = Bell;
"contact_phoneNumber" = "(555) 564-8583";
};
s8haDrYYAT9Y12ZnmAfE87pDyjDZGwjx = {
"contact_firstName" = Daniel;
"contact_lastName" = Higgins;
"contact_phoneNumber" = "555-478-7672";
};
}
感謝:)
申し訳ありませんが、それはひどく私のセルを埋めるのはなぜですか? – schtipoun