![](/img/trans.png)
[英]Swift 4: Passing from table view to view controller - Firebase?
[英]Swift 3 Firebase retrieving key and passing to view controller
我已经花了几个小时来研究相同的问题,但是我发现的答案都没有对这个问题有所帮助。 简单的应用程序从Firebase
数据库检索数据,然后从tableview传递到另一个视图控制器。 主数据将通过,但是如果没有标识的“键”(我尝试将其设置为childByAutoID()
但随后更改为timestamp
childByAutoID()
我将无法编辑信息。 不管采用哪种方法,我得到的只是条目信息,而不是实际的密钥本身。
func loadData() {
self.itemList.removeAll()
let ref = FIRDatabase.database().reference()
ref.child(userID!).child("MyStuff").observeSingleEvent(of: .value, with: { (snapshot) in
if let todoDict = snapshot.value as? [String:AnyObject] {
for (_,todoElement) in todoDict {
let todo = TheItems()
todo.itemName = todoElement["itemName"] as? String
todo.itemExpires = todoElement["itemExpires"] as? String
todo.itemType = todoElement["itemType"] as? String
self.itemList.append(todo)
print (snapshot.key);
}
}
self.tableView.reloadData()
}) { (error) in
print(error.localizedDescription)
}
}
您要查找的键位于for循环的迭代器中
在if-let内部,尝试执行以下操作:
for (key,todoElement) in todoDict {
print(key) // this is your childByAutoId key
}
这应该可以解决问题。 否则请向我们显示您的数据库结构的屏幕
如果您的数据如下所示:
Uid: {
MyStuff: {
AutoID: {
itemName: “Apocalypse”,
itemExpires: “December 21, 2012”,
itemType: “Catastrophic”
}
}
}
然后我会这样查询:
ref.child(userID!).child("MyStuff").observeSingleEvent(of: .value, with: { (snapshot) in
for child in snapshot.children {
let child = child as? DataSnapshot
let key = child?.key as? String
if let todoElement = child?.value as? [String: Any] {
let todo = TheItems()
todo.itemName = todoElement["itemName"] as? String
todo.itemExpires = todoElement["itemExpires"] as? String
todo.itemType = todoElement["itemType"] as? String
self.itemList.append(todo)
self.tableView.reloadData()
}
}
})
另外,就像我在评论中说的那样,如果您使用的是.updateChildValues()
则只需将密钥与数据一起上传即可。 例:
let key = ref.child("userID!").childByAutoId().key
let feed = ["key": key,
“itemName”: itemName] as [String: Any]
let post = ["\(key)" : feed]
ref.child("userID").child("MyStuff").updateChildValues(post) // might want a completionBlock
然后,您可以按照获取其余值的相同方式获取密钥。 因此,您的新数据将如下所示:
Uid: {
MyStuff: {
AutoID: {
itemName: “Apocalypse”,
itemExpires: “December 21, 2012”,
itemType: “Catastrophic”,
key: “autoID”
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.