1
テーブルビューは現在テーブルを更新し、Firebaseデータベースに追加されるとリアルタイムで新しいアイテムを追加します。問題は、リアルタイムで削除できないことです。 firebaseのデータをローカル配列に格納し、その配列をtableviewにロードしています。Fireviewで削除されたテーブルビュー項目を削除する方法
私のコードを少し凝縮しようとしました。私はまた、私のpopulateArrays()関数の中にremoveDeletedItems()関数の中にあるFirebaseコードを置いて、.childAddedリスナーの後に置くようにしましたが、リアルタイムでデータを削除することはできませんでした。
override func viewDidLoad() {
super.viewDidLoad()
populateArrays()
}
func removeDeletedItems() {
let databaseRef = FIRDatabase.database().reference()
databaseRef.child("Users").observe(FIRDataEventType.childRemoved, with: { (FIRDataSnapshot) in
guard let emailToFind = FIRDataSnapshot.value as? String else { return }
for (index, email) in self.usernames.enumerated() {
if email == emailToFind {
let indexPath = IndexPath(row: index, section: 0)
self.usernames.remove(at: index)
self.tableView.deleteRows(at: [indexPath], with: .fade)
self.tableView.reloadData()
}
}
})
}
func populateArrays(){
let databaseRef = FIRDatabase.database().reference()
databaseRef.child("Users").observe(FIRDataEventType.childAdded, with: { (FIRDataSnapshot) in
if let data = FIRDataSnapshot.value as? NSDictionary {
if let name = data[Constants.NAME] as? String {
self.usernames.append(name)
self.removeDeletedItems()
self.tableView.reloadData()
}
}
})
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.textLabel?.text = usernames[indexPath.row]
return cell
}
私はConstants.EMAILを謝罪します。別のConstantsスウィフトファイルがあり、Constants.EMAILは単に "email"を意味します。私はそれを忘れてしまった。 – user2411290
私は答えを更新したので、 'added'メソッドのように名前を調べるべきです。 – vadian
これは機能します。私は本当にあなたの助けに感謝します! – user2411290