ios - 未从 firebase 添加 TableView 事件
问题描述
我正在尝试从 firebase 更新 tableView 值中的值。在观察闭包中将值放入数组中,但之后,它仍然为 0,这是有道理的,因为它是异步的(如果我错了,请纠正我)。但是,这在以前的 tableView 中已经工作过,所以我不确定问题是什么。这是代码:
let id = Auth.auth().currentUser?.uid
Database.database().reference().child("users").child(id!).child("createdEvents").observe(.value) { snapshot in
//self.eventsArray.removeAll()
let ref = Database.database().reference().child("users").child(id!).child("createdEvents")
ref.observe(.value) { snapshot in
print("start")
print(snapshot.childrenCount)
let enumerator = snapshot.children
while let rest = enumerator.nextObject() as? DataSnapshot {
self.eventsArray.append(rest.key as! String)
}
Database.database().reference().child("Events").observe(.value) { (data) in
let events = data.value as! [String:[String:Any]]
for(_,value) in events{
print(self.eventsArray)
if(self.eventsArray.contains(value["EventName"]! as! String)){
self.actualEvents.append(AdminEvents(evName: value["EventName"]! as! String, evDesc: value["EventDescription"]! as! String, evStartDate: value["start time"]! as! String, evEndDate: value["end time"] as! String, evNumPeople: value["NumberOfPeople"]! as! Int, evNumRegistered: value["currentPeople"] as! Int))
}
}
print("Actual events array " + "\(self.actualEvents)")
}
}
self.tblEvents.reloadData()
}
这里的最终目标是进入用户 createdEvents 并将 eventTest 和 eventTest1 打印到 tableView,但里面没有值。编辑:我忘了添加事件 firebase 结构,它确实存在。
解决方案
好的,我修好了。对于那些想知道的人,我只是删除了围绕这部分的观察闭包,因为我意识到第一部分已经这样做了。
let ref = Database.database().reference().child("users").child(id!).child("createdEvents")
ref.observe(.value) { snapshot in
print("start")
print(snapshot.childrenCount)
let enumerator = snapshot.children
while let rest = enumerator.nextObject() as? DataSnapshot {
self.eventsArray.append(rest.key as! String)
}
这是新代码:
Database.database().reference().child("users").child(id!).child("createdEvents").observe(.value) { snapshot in
//self.eventsArray.removeAll()
print("start")
print(snapshot.childrenCount)
let enumerator = snapshot.children
while let rest = enumerator.nextObject() as? DataSnapshot {
self.eventsArray.append(rest.key as! String)
}
Database.database().reference().child("Events").observe(.value) { (data) in
let events = data.value as! [String:[String:Any]]
for(_,value) in events{
print(self.eventsArray)
if(self.eventsArray.contains(value["EventName"]! as! String)){
self.actualEvents.append(AdminEvents(evName: value["EventName"]! as! String, evDesc: value["EventDescription"]! as! String, evStartDate: value["start time"]! as! String, evEndDate: value["end time"] as! String, evNumPeople: value["NumberOfPeople"]! as! Int, evNumRegistered: value["currentPeople"] as! Int))
}
}
print("Actual events array " + "\(self.actualEvents)")
}
self.tblEvents.reloadData()
}
self.tblEvents.dataSource = self
self.tblEvents.delegate = self
}
推荐阅读
- nim-lang - 如何在 Nim 中划分 int64?
- node.js - Telegram Bot - 当我的机器人服务器关闭时,有没有办法丢弃传入的消息?
- javascript - HTML 检查用户在表单中输入的字母
- javascript - 空瓷砖的传单自定义图像
- arrays - 使用正则表达式拆分字符串以将子字符串存储在映射中的分隔符内以创建键值对
- c# - 如何验证文件的 AesManaged 加密
- ios - 无法在 KVO 中调用观察者
- php - 为什么找不到类
- c# - .Net Core XUnit - 没有使用“dotnet test”指定测试源文件
- rdf - MeSH 数据集未在 dotNetRDF 中加载