ios – 如何使用Swift从UITableViewCell中删除Firebase中的特定子节点

我有一个看起来像这个图像的UITableView

.

当我滑动删除记录时,我可以将其从存储它的数组中完全删除,但是我在Firebase中访问它时很难将其删除.

对于上面的屏幕截图,我的Firebase数据库结构如下:

-KWc7RTuOe5PefiMM2tL
    bodyPart: "Arms"
    exerciseName: "Test 1 "
    userId: "8rHmyTxdocTEvk1ERiiavjMUYyD3"
 -KWcEbpw_f6kxcePY5cO
    bodyPart: "Chest"
    exerciseName: "Test 2 "
    userId: "8rHmyTxdocTEvk1ERiiavjMUYyD3"
 -KWcEdUN49QaJIVf0kwO
    bodyPart: "Legs"
    exerciseName: "Test 3 "
    userId: "8rHmyTxdocTEvk1ERiiavjMUYyD3"
 -KWcFrMSaLKQRxghGHyT
    bodyPart: "Arms"
    exerciseName: "Test 4"
    userId: "8rHmyTxdocTEvk1ERiiavjMUYyD3"

如何访问创建时设置的autoId值,例如“-KWc7RTuOe5PefiMM2tL”,以便删除该子节点?

或者我可以根据登录的UserId访问exerciseName值吗?

解决方法

继MHDev已回答之后:
func tableView(_ tableView: UITableView,commit editingStyle: UITableViewCellEditingStyle,forRowAt indexPath: IndexPath) {
    if editingStyle == .delete {

        if let exerciseName = exercises[indexPath.row].exerciseName {

            let ref = FIRDatabase.database().reference().child("userExercises")

            ref.queryOrdered(byChild: "exerciseName").queryEqual(tovalue: exerciseName).observe(.childAdded,with: { (snapshot) in

                snapshot.ref.removeValue(completionBlock: { (error,reference) in
                    if error != nil {
                        print("There has been an error:\(error)")
                    }
                })

            })

        }

        exercises.remove(at: indexPath.row)
        tableView.deleteRows(at: [indexPath],with: .left)
    }
}

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...