点击删除按钮。我正在尝试从Firebase数据库中删除特定的孩子。我的问题是我无法引用我的数据库中的特定childByAutoId
因此我的应用程序不知道要删除的子项。
Firebase数据库
DataServices文件
import Foundation
import Firebase
import UIKit
let DB_BASE = FIRDatabase.database().reference().child("laboratory") //contains the root of our database
let STORAGE_BASE = FIRStorage.storage().reference()
class DataService {
static let ds = DataService()
//DB References
private var _REF_BASE = DB_BASE
private var _REF_STATION = DB_BASE.child("stations")
private var _REF_USERS = DB_BASE.child("users")
//Storage Reference
private var _REF_ITEM_IMAGE = STORAGE_BASE.child("item-pics")
var REF_BASE: FIRDatabaseReference {
return _REF_BASE
}
var REF_STATION: FIRDatabaseReference {
return _REF_STATION
}
var REF_USERS: FIRDatabaseReference {
return _REF_USERS
}
var REF_ITEM_IMAGES: FIRStorageReference {
return _REF_ITEM_IMAGE
}
//creating a new user into the firebase database
func createFirebaseDBUser(_ uid: String, userData: Dictionary<String, String>) {
REF_USERS.child(uid).updateChildValues(userData)
}
}
我尝试删除的信息不在tableViewCell
中。我已经尝试将键附加到数组但我仍然无法访问要删除的相应子项。
func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
return true
}
func tableView(tableView: (UITableView!), commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: (NSIndexPath!)) {
}
func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
let currentStation = station.title
let stationRef = DataService.ds.REF_STATION.child(currentStation!)
let inventoryRef = stationRef.child("inventory")
var deleteAction = UITableViewRowAction(style: .default, title: "Delete") {action in
//delete items from firebase
self.items.remove(at: indexPath.row)
tableView.deleteRows(at: [indexPath as IndexPath], with: .fade)
}
var editAction = UITableViewRowAction(style: .normal, title: "Edit") { action in
}
return [deleteAction, editAction]
}
我在网上找不到关于此的信息。提前谢谢!
答案 0 :(得分:0)
让我们从简化的结构开始
-Uiiasidasod
item_name: "iMac"
-Yiimamsmdd
item_name: "MacBook"
典型的设计模式是从Firebase读取这些项目并将它们存储在一个词典数组中。该数组用作tableViews的数据源。
每个字典都是一个键:值对。
因此,上面的第一个节点有一个Firebase密钥(父节点名称为“Uiiasidasod”,值为“item_name:iMac”(注意该值也是一个字典)
myArray[0] = ["Uiiasidasod": "item_name: 'iMac'"]
myArray[1] = ["Yiimamsmdd": "item_name: 'MacBook'"]
因此,当用户在表格中滑动第1行时,您将从阵列第1行中获取字典。您将获得密钥部分(Firebase节点名称),然后可以从Firebase中删除它。