Firebase:从行中删除项目(Swift 3) [英] Firebase: delete item from row (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屋!