firebaseui-ios与UITableView

时间:2016-03-07 18:04:12

标签: ios swift uitableview firebase firebaseui

我正在使用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
}

任何人都可以帮助诊断我在这里做错了吗?我的方法是否正确?

感谢您提供任何帮助!

1 个答案:

答案 0 :(得分:0)

我已经改变了我的方法来寻找解决方案。我在Firebase中修改了我的数据结构,以便状态成为密钥。然后,我将FirebaseTableViewDataSource绑定到' pending'的引用。键。当用户接受/拒绝邀请时,它将从“待定”状态中删除。节点并在“已接受' /'拒绝'上创建节点。 tableView现在按照预期更新新的'待定'邀请已添加或已存在'待定'邀请被接受/拒绝。