群聊 - 如何仅使用用户参与的聊天室填充表格视图?

时间:2017-03-28 16:04:22

标签: ios swift

我正在尝试制作群聊应用,到目前为止,我已经安装了应用程序(来自教程),以便任何用户都可以创建一个房间,所有这些房间都显示在一个中央列表中,这对所有用户都是一样的。现在我需要改变这一点,以便用户只能看到他们创建或已添加的房间(就像iMessage这样的任何消息传递应用程序)。

这就是创建一个房间并将其附加到Room对象(并上传到Firebase)的方式:

var rooms: [Room] = []

// Create new room
@IBAction func createRoom(_ sender: Any) {
    if let name = newRoomTextField?.text {
        let newRoomRef = roomRef.childByAutoId()
        let roomItem = [
            "name": name
        ]
        newRoomRef.setValue(roomItem)
    }
}

private func observeRooms() {
    // Observe method to listen for new channels being written to Firebase
    roomRefHandle = roomRef.observe(.childAdded, with: { (snapshot) -> Void in
        let roomData = snapshot.value as! Dictionary<String, AnyObject>
        let id = snapshot.key
        if let name = roomData["name"] as! String!, name.characters.count > 0 {
            self.rooms.append(Room(id: id, name: name))
            self.tableView.reloadData()
        } else {
            print("Error! Could not decode channel data")
        }
    })
}

房间对象:

internal class Room {
    internal let id: String
    internal let name: String

    init(id: String, name: String) {
        self.id = id
        self.name = name
    }
}

目前,会议室的表格视图中填充了cell.textLabel?.text = rooms[(indexPath as NSIndexPath).row].namecellForRow方法)和return rooms.countnumberOfRows方法),从而返回了应用中的所有会议室,并非特定于用户。

这是我不确定如何继续的地方:我猜测我会添加一个阵列&#34;参与者:[String]&#34;到我的房间对象(除了&#34; id&#34;和&#34;名称&#34;),然后在我observeRooms的{​​{1}}中,我还附加了用户对&#34;参与者&#34;?的ID然后仅使用当前用户的id参与的房间填充表格视图?

这是正确的方法吗?

感谢您提供任何帮助/指导!

1 个答案:

答案 0 :(得分:1)

我认为这是正确的方法,你基本上有两个选择:

  • participants数组存储到每个房间,以便查询此数组包含当前userId的房间。
  • 在每个用户上存储rooms数组,允许直接从此数据查询房间。

如果您想要显示参与者列表,第一种方法似乎更有意义,尽管对于许多房间*许多参与者而言,查询可能需要比第二种方法更长的时间来执行。

您也可以同时使用这两种方法同时拥有用户房间的功能和更快的查询时间。