删除tableView单元格,并从firebase中删除数据

时间:2018-03-22 20:20:51

标签: swift firebase firebase-realtime-database swift4

我是swift和firebase的新手。在这里完成了一些研究,找不到可以解决我的问题,缺乏经验的解决方案。

尝试从firebase删除tableView Cell时遇到问题"类型'组'没有会员' ref'"

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

    if editingStyle == .delete {
        let ref = groupsArray[indexPath.row].ref
        ref!.removeValue()
        groupsArray.remove(at: indexPath.row)

        tableView.deleteRows(at: [indexPath], with: .fade)
}}

enter image description here

任何想法我做错了什么? enter image description here

泰伯维

    extension ChatViewController: UITableViewDelegate, UITableViewDataSource{
func numberOfSections(in tableView: UITableView) -> Int {
    return 1

}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return groupsArray.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    guard let cell = groupsTableView.dequeueReusableCell(withIdentifier: "groupTableViewCell", for:indexPath) as?
        GroupTableViewCell else {return UITableViewCell()}
    let group = groupsArray[indexPath.row]
    cell.configureCell(title: group.groupTitle, description: group.groupDesc, membersCount: group.membersCount)
    return cell
}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    guard let groupFeedViewController = storyboard?.instantiateViewController(withIdentifier: "GroupFeedViewController") as? GroupFeedViewController else {return}
    groupFeedViewController.initData(forGroup: groupsArray[indexPath.row])
    presentDetail(groupFeedViewController)

}}

小组课程

    import Foundation

    class Group {
private var _groupTitle: String
private var _groupDesc: String
private var _key: String
private var _memberCount: Int
private var _members: [String]

var groupTitle: String {
    return _groupTitle
}

var groupDesc: String {
   return _groupDesc
}
var key: String {
    return _key
}
var membersCount: Int {
    return _memberCount
}
var members: [String] {
    return _members
}

init(title: String, description: String, key: String, members: [String], memberCount: Int){
    self._groupTitle = title
    self._groupDesc = description
    self._key = key
    self._members = members
    self._memberCount = memberCount
}}

1 个答案:

答案 0 :(得分:2)

首先,您不会从Firebase中删除tableViewCell,但您可以从Firebase中删除数据,以填充tableView

其次,你所做错的是尝试从数组中获取ref的类值。

第三,在从网上删除数据后,您仍然需要从表中删除单元格,您的代码看起来会很好,但我将它放在这里是为了完整。

  

要从Firebase中删除值,您需要创建一个引用,然后从那里处理事物。像这样:

let ref = Database.database().reference(fromURL: yourProjectURL)
let groupRef= ref.child("groups").child(groupsArray[indexPath.row].key)
// ^^ this only works if the value is set to the firebase uid, otherwise you need to pull that data from somewhere else.
groupRef.removeValue()
  

然后从数组中删除项目:

groupsArray.remove(at: indexPath.row)
  

并删除tableView

中的行
tableView.deleteRows(at: [indexPath], with: .automatic)
  

一切都应该是这样的:

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
    if editingStyle == .delete {
        let ref = Database.database().reference(fromURL: yourProjectURL)
        let groupRef= ref.child("groups").child(groupsArray[indexPath.row].key)
        // ^^ this only works if the value is set to the firebase uid, otherwise you need to pull that data from somewhere else.
        groupRef.removeValue()
        groupsArray.remove(at: indexPath.row)
        tableView.deleteRows(at: [indexPath], with: .fade)
    }
}