- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我在基于快照键填充 tableView 时遇到问题。控制台正在打印从 queryEqual(toValue: locationString) 调用的父节点和子节点的所有 (nodeToReturn) 值,因此我知道我正在正确查询它们。但出于某种原因,我的 tableView 不断填充来 self 的 Database.database().reference().child("Travel_Experience_Places") 的所有用户词典。我只希望 tableView 显示来自“nodeToReturn”值的快照数据,所以不是来 self 的“Travel_Experience_Places”数据库引用的每个父节点 - 只有在其子节点中具有相同“locationString”值的父节点。希望这是有道理的。提前致谢!
//模型对象
class User: SafeUserObject {
var id: String?
var name: String?
var email: String?
var profileImageUrl: String?
var place: String?
init(dictionary: [String: AnyObject]) {
super.init()
self.id = dictionary["fromId"] as? String
self.name = dictionary["addedBy"] as? String
self.email = dictionary["email"] as? String
self.profileImageUrl = dictionary["profileImageUrl"] as? String
self.place = dictionary["place"] as? String
setValuesForKeys(dictionary)
}
}
//JSON结构
"Travel_Experience_Places" : {
"-Ks0Ms4fEQZxBytI-vu_" : {
"addedBy" : "Daniel Meier",
"place" : "Barcelona, Spain",
"profileImageUrl" : "https://firebasestorage.googleapis.com/v0/b/travelapp-255da.appspot.com/o/profile_images%2F21673E85-4F58-480D-B0A9-65884CADF7B3.png?alt=media&token=9e111014-d1d7-4b3b-a8c2-3897032c34cc",
"timestamp" : 1.503261589872372E9
},
//tableview 在 tableview 中返回 firebase queryEqual(toValue: locationString)
var experiencePlaceUsers = [User]()
func fetchTravelingUserCell() {
let databaseRef = Database.database().reference().child("Travel_Experience_Places")
databaseRef.queryOrdered(byChild: "place").queryEqual(toValue: locationString).observe(.value, with: { snapshot in
if snapshot.exists(){
let allKeys = snapshot.value as! [String : AnyObject]
let nodeToReturn = allKeys.keys
print(nodeToReturn) // prints parent and child values that have locationString as a child value in its data structure
}
})
databaseRef.observe(.childAdded, with: { (snapshot) in
if let dictionary = snapshot.value as? [String: AnyObject] {
let user = User(dictionary: dictionary)
self.experiencePlaceUsers.append(user)
self.tableView.reloadData()
}
}, withCancel: nil)
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return experiencePlaceUsers.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath) as! UserCell
cell.user = experiencePlaceUsers[indexPath.item]
return cell
}
最佳答案
我相信您需要在获取 nodeToReurn 的 block 中重新加载 TableView
var experiencePlaceUsers = [User]()
func fetchTravelingUserCell() {
let databaseRef = Database.database().reference().child("Travel_Experience_Places")
databaseRef.queryOrdered(byChild: "place").queryEqual(toValue: locationString).observe(. childAdded, with: { snapshot in
if snapshot.exists(){
if let allKeys = snapshot.value as? [String: AnyObject] {
let singleUser = User(dictionary: allKeys)
self.experiencePlaceUsers.append(singleUser)
DispatchQueue.main.async(execute: {
self.tableView.reloadData()
})
}
}
})
/*
databaseRef.observe(.childAdded, with: { (snapshot) in
if let dictionary = snapshot.value as? [String: AnyObject] {
let user = User(dictionary: dictionary)
self.experiencePlaceUsers.append(user)
self.tableView.reloadData()
}
}, withCancel: nil)
*/
}
关于swift - 根据返回的 queryEqual(toValue) 填充 TableView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45807682/
我的 Firebase 中有以下层次结构: func invitedEvents() { DataService.ds.REF_EVENTS.queryOrdered(byChild:
我正在尝试通过作者 ID 查询对象列表。这可能吗? Programs program1 authorId: user1 program2 author
我的 Firebase 结构如下所示: - key1 -key2 -key3:value -key4:value -key5:value -key6:val
我正在尝试按“流派”:“艺术与人文”进行查询,但还需要 queryEnding 根据时间戳对我的数据进行分页。 但是,我们不能在 Xcode 中组合使用它们。还有什么方法呢? 这就是我正在尝试的:(不
因此,我想检查用户的设备是否在我的列表中(用于测试)。为此,我的 Firebase 数据集中有一小组值。 看起来是这样的: 但是当我试图检查用户的 ID 是否在此列表中时,我什么也没得到。 let c
我在基于快照键填充 tableView 时遇到问题。控制台正在打印从 queryEqual(toValue: locationString) 调用的父节点和子节点的所有 (nodeToReturn)
我想从我的 firebase 表中选择一个特定的名称(看图片)。打印的结果总是空的。所选名称应为“manni”。我的代码有什么问题?非常感谢。 @IBAction func BTSelect(_
在 Firebase 中搜索用户名(或任何与此相关的搜索)时有什么区别.queryOrdered().queryEqual(toValue: 和 child().observeSingleEvent(
我是 NoSQL 和 Firebase 的新手。我有这样的数据库用于路径“作家”。 我试图使用此代码找到任何使用电子邮件“test@test.com”的用户: ref.child("writers")
root | @--reviews | | @--postABC // postId |
当运行下面的代码时,我得到一个空的响应,即使相应的数据在那里: self.ref?.child("play-data/calories/GC5g4RUmy0WTTL5w3jSobefa9Ft2").
我是一名优秀的程序员,十分优秀!