我是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)
}}
泰伯维
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
}}
答案 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)
}
}