【发布时间】:2017-05-10 03:44:41
【问题描述】:
我想获取一个事件对应的用户
我有一个事件列表
let eventsRef = FIRDatabase.database().reference.child("Events")
我有一个用户列表
let usersRef = FIRDatabase.database().reference.child("Users")
我的事件和用户模型如下
- 事件
- 事件 1
- eventHost:user1_uid
- 事件2
- eventHost: user2_uid
- 事件 1
- 用户
- 用户 1
- 电子邮件:email1
- 用户2
- 电子邮件:email2
- 用户 1
从不调用以下回调(在事件模型中):
if let userKey = eventData["eventHost"] as? String {
userRef = usersRef.child(userKey)
userRef.observeSingleEvent(of: .value, with: { snapshot in
...
})
}
我可以确认我没有启用磁盘持久性并且用户 uid 可用。我做错了什么吗?
====== 编辑:简化的事件模型
import Foundation
import Firebase
class Event {
// event metadata
private var _eventId: String!
private var _eventHost: User!
var eventId: String {
return _eventId
}
var eventHost: User {
return _eventHost
}
init(eventId: String, eventData: Dictionary<String, Any>) {
self._eventId = eventId
if let userKey = eventData["eventHost"] as? String {
let usersRef = FIRDatabase.database().reference().child("Users")
let userRef = usersRef.child(userKey)
print(userRef)
userRef.observeSingleEvent(of: .value, with: { (snapshot) in
print("USERY: \(snapshot.key)")
if let userDict = snapshot.value! as? Dictionary<String, Any> {
let id = snapshot.key
self._eventHost = User(userId: id, userData: userDict)
}
})
}
}
}
print(userRef) 解析为
https://xxxx.firebaseio.com/Users/AFHpS3npOga4tfj10GS2HGeT9uJ3`
这是我的 Firebase 结构中的有效对象。 Firebase 用户结构片段
"AFHpS3npOga4tfj10GS2HGeT9uJ3" : {
"email" : "test@gmail.com",
"firstName" : "Wilma",
"lastName" : "Flintstone",
"profileImageUrl" : "http://images.iimg.in/c/569f4771c45d324bda8b4660-4-501-0-1453279096/google/user-icon-png-pnglogocom.img",
"provider" : "Firebase",
"userId" : "AFHpS3npOga4tfj10GS2HGeT9uJ3"
},
【问题讨论】:
-
我想帮忙,但我没有看到任何明显错误的地方。我假设当你说回调永远不会被调用时,你在里面放了一个断点?
-
@JenPerson 是的,我放了一个断点,但它没有到达那里
-
如果你在你的观察函数中打印一些东西,它会执行吗?
-
@J.Doe 不,它根本不会进入。我确实偶尔会看到它打印一次,但一直无法弄清楚如何让它始终如一地完成
-
需要更多信息:if let userKey = code 是否被调用?如果您在 self._eventId 处设置断点并手动单步执行代码,一次一行,它会在哪一行停止工作?
标签: ios swift firebase firebase-realtime-database