gpt4 book ai didi

swift - 使用监听器的常用例程创建 Firebase 引用数组

转载 作者:行者123 更新时间:2023-11-30 13:35:11 24 4
gpt4 key购买 nike

我想创建一个 Firebase 实例数组,每个实例都有触发相同例程的监听器。

例如:假设数据存储在根目录中,如下所示:

https://someapp.firebaseio.com/chatrooms/RoomFoo/John/...
https://someapp.firebaseio.com/chatrooms/RoomFoo/Mary/...
..
..
https://someapp.firebaseio.com/chatrooms/RoomBar/Alice/...
https://someapp.firebaseio.com/chatrooms/RoomBar/Bob/...

每个房间内的成员都有一个监听器(childAdded 和 childRemoved),该监听器针对该房间中的每个用户

假设 Adam 加入 RoomFoo,会发生以下情况:

  • Adam 获取当前数据
  • Adam 在用户 John 和用户 Mary 处设置监听器:以防这些用户添加或删除各自的数据
  • Adam 在 RoomFoo 设置监听器,这样他就可以处理任何新用户加入

同样:

  • John 和 Mary 在 RoomFoo 上为新用户触发了监听器(Adam)刚刚加入
  • John 和 Mary 为 Adam 设置监听器来处理 Adam 添加或的数据在他下面移除

如果我构建 Firebase 引用数组,我可以添加/删除对此数组的引用并设置监听器,但这些监听器永远不会被调用!

这就是数组的声明方式(Swift)

var allUserRef : [Firebase] = []

附加对此数组的引用并设置监听器的逻辑

func userJoinedRoom(snapshot: FDataSnapshot!) {
print(snapshot.key + " Joined!")
let firebaseRootRef = Firebase(url: firebaseRootUrl)
let roomsRootRef = firebaseRootRef.childByAppendingPath(roomsRelativePath)
let userRoomRef = roomsRootRef.childByAppendingPath(snapshot.key)
//read initial data as well : TODO
allUserRef.append(userRoomRef)
print(allUserRef) //Works great - i can see a list of references
userRoomRef.observeEventType(.ChildAdded, withBlock: userAddedData)
userRoomRef.observeEventType(.ChildRemoved, withBlock: userRemovedData)
}

问题是 userAddedData 和 userRemovedData 永远不会被调用

我的错误是什么?

最佳答案

正如 Jay 在评论中指出的那样,我通过维护字典中的句柄(按用户 ID 索引)而不是 Firebase 实例解决了我的问题

关于swift - 使用监听器的常用例程创建 Firebase 引用数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36166692/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com