从Firebase中删除当前单元格值

时间:2016-10-13 10:53:36

标签: ios swift uitableview firebase firebase-realtime-database

首先,我没有看到任何与此相关的问题。我正在尝试从Firebase删除特定值,该值来自tableview cell

首先enable删除按钮如果post == usernamecellForRowAt indexPath: IndexPath函数内if postsArray[indexPath.row].username == currentUser.generalDetails.userName{ cell.deletePostButton.isHidden = false }else{ cell.deletePostButton.isHidden = true } 这样:

cell.deletePostButton.addTarget(self, action: #selector(deletePost), for: .touchUpInside)

在这里我调用deletePost()函数:

    func deletePost(sender: UIButton, cellForRowAt indexPath: IndexPath){


FIRDatabase.database().reference().child("posts").child(postsArray[indexPath.row].postId).removeValue()
}

我尝试运行此功能,但它终止了应用程序:

"SELECT s.user1,s.user2,count(*) as recent_messages
FROM (
    SELECT CASE WHEN t.mfrom > t.mto THEN t.mfrom ELSE t.mto END as user1,
           CASE WHEN t.mfrom < t.mto THEN t.mfrom ELSE t.mto END as user2
    FROM AccountTable t WHERE t.mfrom = 10 OR t.mto=10) s
GROUP BY s.user1,s.user2"

为了说明这一点,这是我的带有删除按钮的桌面视图,删除按钮(红色内容)应该从Firebase中删除该行:

enter image description here

为什么函数会终止应用程序?

1 个答案:

答案 0 :(得分:1)

你的做法是正确的:

FIRDatabase.database().reference().child(postsArray[indexPath.row].postId).removeValue()

但是如果你有一个父节点posts,你必须使用它:

FIRDatabase.database().reference().child("posts").child(postsArray[indexPath.row].postId).removeValue()

sry没有使用屏幕截图中的键值KTxXAp4o...,再看看

有关问题更新的更新

我想出了在不添加额外参数的情况下访问indexPath的唯一方法是这种关于answer的hacky方式:

因此,将deletePost函数更新为此用于访问特定行:

  func deletePost(sender: UIButton){
    // If you have only one section
    let section = 0
    let row = sender.tag
    let indexPath = IndexPath(row: row, section: section)

    print("indexPath row: \(indexPath.row)")
  }

在调用deletePost()函数之前,将标记添加到按钮:

// add the row as the tag
cell.deleteButton.tag = indexPath.row
// still the same    
cell.deleteButton.addTarget(self, action: #selector(deletePost), for: .touchUpInside)

在此之后,您可以访问特定行,并且您的应用不应该终止。