首先,我没有看到任何与此相关的问题。我正在尝试从Firebase删除特定值,该值来自tableview cell
。
首先enable
删除按钮如果post == username
在cellForRowAt 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中删除该行:
为什么函数会终止应用程序?
答案 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)
在此之后,您可以访问特定行,并且您的应用不应该终止。