如何从Firebase删除childByAutoId()?

时间:2019-07-27 15:18:24

标签: swift firebase firebase-realtime-database

我正在制作一个简单的待办事项列表应用程序。 Firebase Realtime Database当前正在按用户存储每个待办事项列表项。当用户向右滑动时,用户可以选择从列表中删除该项目并将其从Firebase中删除。

我的代码目前存在的问题是,当用户向右滑动删除时,它将删除整个节点。我还没有找到一种方法来存储childByAutoId(),然后在需要删除时将其恢复。有任何指导或帮助吗?

var ref: DatabaseReference!
var items:[String] = []
var key = ""


@IBOutlet weak var itemPopup: UITextField!
@IBOutlet weak var myTableView: UITableView!
@IBOutlet weak var label1: UILabel!

@IBAction func addItem(_ sender: Any) {

    if itemPopup.isHidden == true
    {
        itemPopup.isHidden = false
        self.itemPopup.becomeFirstResponder()
    }
    else
    {
        itemPopup.isHidden = true
    }
}

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    self.itemPopup.resignFirstResponder()
    self.itemPopup.isHidden = true
}

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    itemPopup.resignFirstResponder()
    itemPopup.isHidden = true


    ref.child(key).childByAutoId().setValue(itemPopup.text)


    itemPopup.text = ""

    return true
}




func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return items.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = UITableViewCell(style: .default, reuseIdentifier: "cell")
    cell.textLabel?.text = items[indexPath.row]
    cell.textLabel?.numberOfLines=0 // line wrap
    cell.textLabel?.lineBreakMode = NSLineBreakMode.byWordWrapping

    return cell
}

func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
    return true
}

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
    if (editingStyle == .delete) {
        let state = [indexPath.row]
        print(state)
        items.remove(at: indexPath.item)
        tableView.deleteRows(at: [indexPath], with: .fade)
        ref.child(key).removeValue()
    }
}


override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
    self.itemPopup.delegate = self

    ref = Database.database().reference()


    key = ref.childByAutoId().key!


    ref.child(key).observe(.childAdded, with: { (snapshot) in

        if let item = snapshot.value as? String
        {
            self.items.append(item)
            self.myTableView.reloadData()
        }
    })
}

0 个答案:

没有答案