如何从firebase删除子项后更新ios表视图

时间:2018-01-21 15:32:13

标签: ios firebase firebase-realtime-database

firebase 执行tableview后,我无法重新加载removeValue()。该表仅在我退出并返回页面时更新,这不是我的意图。我想在删除帖子时实时更新表格。寻求建议我如何实现这一目标。

我尝试将以下内容添加到我的代码中,但它无法正常工作。

postsDB.observe(.childRemoved) { (snapshot) in
    self.myPostsTable.reloadData() 
}

我的firebase结构如下所示:

enter image description here

我使用 SwipeCellKit Pod ,我删除帖子的代码是这样的:

func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath, for orientation: SwipeActionsOrientation) ->
 [SwipeAction]? {

    guard orientation == .right else { return nil }

    let delete = SwipeAction(style: .destructive, title: nil) { action, indexPath in
        let postsDB = Database.database().reference().child("posts")
        let selectedPost = self.postArray[indexPath.row]
        let postid = selectedPost.postid
        postsDB.child(postid).removeValue()

    }
    configure(action: delete, with: .trash)
    return [delete]      
}

1 个答案:

答案 0 :(得分:2)

通常在使用数据库且没有像NSFetchedResultsController这样的控制器时,您必须分三步删除项目

  1. 从数据库中删除该项目。
  2. 从数据源阵列中删除该项目。
  3. 删除表格视图中的行。
  4. 所以你必须添加步骤2和3

    let delete = SwipeAction(style: .destructive, title: nil) { action, indexPath in
          let postsDB = Database.database().reference().child("posts")
          let selectedPost = self.postArray[indexPath.row]
          let postid = selectedPost.postid
          postsDB.child(postid).removeValue()
          self.postArray.remove(at: indexPath.row) // step 2
          self.tableView.deleteRows(at: [indexPath], with: .fade) // step 3
    }