Firebase:从行中删除项目(Swift 3) [英] Firebase: delete item from row (Swift 3)

查看:135
本文介绍了Firebase:从行中删除项目(Swift 3)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个显示来自Firebase控制台(JASON结构)的数据的tableview,如下所示:

  chklst-xxx 
- avaliation
-students
-KHZAjBi44eZ8JsaswkKI
-教师:Paul
-datTime:09.12.2016 12:25 pm
-name:Mary Anne
- mark:7.5
-preceptor:John
-KHWZlh7aasy78ahsiuKIi0
- 教师:Paul
-datTime:09.12.2016 12:48 pm
-name:Anne Caroline
-mark:9.4
-preceptor:Peter

这些数据以tableview显示,每个节点的学生,除了钥匙。我有一个函数来删除特定的行,就像我在CoreData(tableview editingStyle)中的其他应用程序一样:

  // FUNC DELETAR 
重写func tableView(_ tableView:UITableView,提交editingStyle:UITableViewCellEditingStyle,forRowAt indexPath:IndexPath){
如果编辑样式== .delete {
teste.remove(at:indexPath.row)
ref.removeValue()//这是我的疑惑
tableView.reloadData()
}
}

我可以从数组和表格中删除项目,但是我不知道如何从Firebase执行此操作。我已经用removeValue的其他方式尝试过,但它只是一种方法来擦除整个数据,不是特别选择行。

$ pre let ref = FIRDatabase.database()。reference()。child(avaliation)。child(students)

我需要一些教学来使这个工作。

这里是我保存这个数据的方法:(已添加09.12 19:30 pm)

<$ p $ ()。child(students)。childByAutoId()$ b $(){
let ref = FIRDatabase.database() (名称)
referencia.child(teacher)。setValue(Teacher)
referencia.child(preceptor)。setValue(Preceptor)
referencia.child(datTime)。setValue(DateTime)
referencia.child(mark).setValue(ResultComFReFC)
}
pre>

这里是我的类,我使用主数组:

  import Foundation 
import Firebase
$ b $ struct ChkList {
var name:String?
var teacher:String?
var preceptor:String?
var DateToday:String?
var mark:String?
var key:String!
$ b $ init(name:String,teacher:String,preceptor:String,mark: String,DateToday:String,key:String =){
s elf.name = name
self.teacher = teacher
self.preceptor = preceptor
self.mark = mark
self.DateToday = DateToday
self.key = key



init(快照:FIRDataSnapshot){
key = snapshot.key
let snapshotValue = snapshot.value as! [String:AnyObject]
name = snapshotValue [name] as? String
teacher = snapshotValue [teacher] as? String
preceptor = snapshotValue [preceptor] as?字符串
mark = snapshotValue [mark] as? String
DateToday = snapshotValue [DateToday] as?字符串
}

func toAnyObject() - >任何{
return [
name:name,
teacher:teacher,
preceptor:导师,
mark:mark,
DateToday:DateToday]}}

更新:Tableview EdityingStyle

 重写func tableView(_ tableView:UITableView,提交editingStyle:UITableViewCellEditingStyle,forRowAt indexPath:IndexPath){

如果editingStyle ==。删除{
let ref = FIRDatabase.database()。reference()。child(avaliation)。child(students)。childByAutoId()
teste.remove(at:indexPath.row) // Array delet item
let userKeyA = ref.key
ref.child(userKeyA).removeValue()
tableView.reloadData()



解决方案

我这样做,使用上面的建议,学习和尝试了很多。
该方法的工作方式是真正捕获userkey。
$ b $ pre $ 重写func tableView(_ tableView:UITableView,提交editStyle:UITableViewCellEditingStyle,forRowAt indexPath:IndexPath){

如果editingStyle == .delete {

让用户:ChkList = teste [indexPath.row]
let uk = user.key
print(Userkey:\(uk))
ref.child(uk!)。removeValue()
}
}

通过这种方式,您将从Firebase和行表格tableview中移除数据。


I have a tableview showing data from a Firebase console (JASON structure) like this:

chklst-xxx
     - avaliation
         -students
              -KHZAjBi44eZ8JsaswkKI
                -teacher: Paul 
                -datTime: 09.12.2016  12:25pm
                -name: Mary Anne
                -mark: 7.5 
                -preceptor: John 
              -KHWZlh7aasy78ahsiuKIi0
                -teacher: Paul 
                -datTime: 09.12.2016  12:48pm
                -name: Anne Caroline
                -mark: 9.4 
                -preceptor: Peter

These data are shown at a tableview, each one, after node students, except the key. I have one function to delete an especific row, as i do with other apps in CoreData (tableview editingStyle):

// FUNC DELETAR
override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
    if editingStyle == .delete {
        teste.remove(at: indexPath.row)
        ref.removeValue() // HERE IS MY DOUBT
        tableView.reloadData()
    }
}

I can erase the item from the array and from the table, but i just don't know how to do it from Firebase. I have tried other ways with removeValue, but it just didn't work, except an way to erase the whole data, not specifically that row selected.

let ref = FIRDatabase.database().reference().child("avaliation").child("students")

I need some teaching to make this works. Thank you.

Here is my method for Saving this data: (Added 09.12 19:30pm)

func Save(){
    let ref = FIRDatabase.database().reference().child("avaliation").child("students").childByAutoId()
    referencia.child("name").setValue(Name)
    referencia.child("teacher").setValue(Teacher)
    referencia.child("preceptor").setValue(Preceptor)
    referencia.child("datTime").setValue(DateTime)
    referencia.child("mark").setValue(ResultComFReFC)
}

And here is my Class where I work with the main Array:

import Foundation
import Firebase

struct ChkList {
var name: String?
var teacher: String?
var preceptor: String?
var DateToday: String?
var mark: String?
var key: String!

init(name: String, teacher: String, preceptor: String, mark: String, DateToday: String, key: String = "") {
    self.name = name
    self.teacher = teacher
    self.preceptor = preceptor
    self.mark = mark
    self.DateToday = DateToday
    self.key = key
}


init(snapshot: FIRDataSnapshot) {
    key = snapshot.key
    let snapshotValue = snapshot.value as! [String: AnyObject]
    name = snapshotValue["name"] as? String
    teacher = snapshotValue["teacher"] as? String
    preceptor = snapshotValue["preceptor"] as? String
    mark = snapshotValue["mark"] as? String
    DateToday = snapshotValue["DateToday"] as? String
}

func toAnyObject() -> Any {
    return [
        "name": name,
        "teacher": teacher,
        "preceptor": preceptor,
        "mark": mark,
        "DateToday": DateToday   ]}}

UPDATE: Tableview EdityingStyle

override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {

  if editingStyle == .delete {
let ref = FIRDatabase.database().reference().child("avaliation").child("students").childByAutoId()
teste.remove(at: indexPath.row) //Array delet item
      let userKeyA = ref.key
      ref.child(userKeyA).removeValue()
      tableView.reloadData()
        }
    }

解决方案

I did it, using suggests above and studying and trying a lot. The way to the method works is really capture the userkey.

override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {

if editingStyle == .delete {

        let user: ChkList = teste[indexPath.row]
        let uk = user.key
        print("Userkey: \(uk)")
        ref.child(uk!).removeValue()
}
}

This way you will have removed the data from Firebase and the row form tableview.

这篇关于Firebase:从行中删除项目(Swift 3)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆