我正在使用FirebaseUI-IOS和FirebaseTableViewDataSource绑定到我的UITableView。对于我的实现,UITableView应该将“邀请”显示为“待处理”状态以连接用户,类似于LinkedIn。存储在Firebase中的邀请数据具有状态键,可以是“待处理”,“已接受”或“已拒绝”。在用户接受/拒绝邀请后,我正在努力让UITableView更新并仅显示“待处理”行。目前发生的是UITableView单元格更新(名称标签更改为默认文本),但仍显示单元格。似乎UITableView绑定到用户“收到”节点下的所有行,而不是响应状态!='pending'。
我在Firebase中的数据结构如下:
Firebase 'Invitation' data structure
我在ViewDidLoad()中使用以下代码初始化FirebaseTableViewDataSource并填充单元格:
//Initialise a Firebase reference to the authorised user's 'received' invitations data
self.ref = Firebase(url: "\(kFBInvitationsUsersRef)/\(authData.uid)/received")
//Query the location for invitations where the status is pending only
self.ref.queryOrderedByChild("status").queryStartingAtValue(InvitationStatus.pending.rawValue).queryEndingAtValue(InvitationStatus.pending.rawValue).observeEventType(.ChildChanged , withBlock: {(snapshot) in
} )
//Assign the tableview datasource to a new FirebaseTableViewDataSource instance using the Firebase ref created above
self.dataSource = FirebaseTableViewDataSource(query: self.ref, modelClass:nil, prototypeReuseIdentifier: "invitationCell", view: self.tableView)
//Call the populateCellWithBlock method and configure the cell
self.dataSource.populateCellWithBlock { (cell: UITableViewCell, obj: NSObject) -> Void in
let cell = cell as! InvitationTableViewCell
let snap = obj as! FDataSnapshot
if let status = snap.value["status"] as? String where status == InvitationStatus.pending.rawValue {
let userRef = Firebase(url: "\(kFBUsersPublicRef)/\(snap.key)")
userRef.observeSingleEventOfType(.Value, withBlock: {snapshot in
let user = User(key: snapshot.key, displayName: snapshot.value["displayName"] as! String, givenName: snapshot.value["givenName"] as! String, familyName: snapshot.value["familyName"] as! String)
cell.user = user
cell.delegate = self
})
}
}
self.tableView.dataSource = self.dataSource
self.tableView.delegate = self
}
任何人都可以帮助诊断我在这里做错了吗?我的方法是否正确?
感谢您提供任何帮助!
答案 0 :(得分:0)
我已经改变了我的方法来寻找解决方案。我在Firebase中修改了我的数据结构,以便状态成为密钥。然后,我将FirebaseTableViewDataSource绑定到' pending'的引用。键。当用户接受/拒绝邀请时,它将从“待定”状态中删除。节点并在“已接受' /'拒绝'上创建节点。 tableView现在按照预期更新新的'待定'邀请已添加或已存在'待定'邀请被接受/拒绝。