如何检索Firebase Swift中不同密钥下存储的数据?
我建立一个应用程序,允许用户扫描条形码和商店的图书信息,并检索他们到一个TableView中。这些书籍存储在当前用户ID - >书籍 - >书名 - >标题,作者..等等。见下面的JSON结构: -如何检索Firebase Swift中不同密钥下存储的数据?
因此,有书有不同的名称,每一个新的书被扫描时,它会在“图书”补时。
我如何获得的所有书籍的数据以不同的名字?
下面的代码,在这里我想在TableViewController检索数据:
var posts = [BooksFromFirebase]()
override func viewDidLoad() {
super.viewDidLoad()
//get reference to data location
let databaseRef = Database.database().reference()
//get current user id
let user = Auth.auth().currentUser
databaseRef.child("users").child((user?.uid)!).child("books").observe(.value, with: { (snapshot) in
if let value = snapshot.value as? [String: AnyObject]{
let assetTitle = value["title"] as? String ?? ""
print("Title ",assetTitle)
let title = assetTitle
let type = "Book"
self.posts.insert(BooksFromFirebase(title: title, type: type), at: 0)
self.tableView.reloadData()
}
})
}
尝试使用这样的: -
Database.database().reference().child("users/(user!.uid)/books").observeSingleEvent(of: .value, with: {(Snapshot) in
if let eachDict = Snapshot.value as? NSDictionary{
for each in eachDict{
print(each.key ?? "No Data")
print(each.value ?? "No Data")
print((each.value as! NSDictionary)["title"] ?? "No data")
}
}
}, withCancel: {(Err) in
// Handle error encountered while communicating via firebase
})
谢谢@Dravidian。没有任何打印声明起作用。但是,我打印出“每个”就在IF语句之前,我得到这样的:'快(临床医学牛津手册){ 作者=“穆雷朗莫尔”; comments =“在这里添加文本...”; isbn = 9780199609628; publisher =“牛津大学出版社”; title =“牛津临床医学手册”; } 快照(编程面试攻略:秘密登陆你的下一个工作){ 作者=“诺亚Suojanen和Eric Giguere约翰·蒙根”; comments =“在这里添加文本...”; isbn = 9788126512744; ' ......等等 – Miki
回答更新... – Dravidian
作品!谢谢! @Dravidian – Miki
哪里错误?尝试打印'databaseRef.child(“users”)。child((user?.uid)!)。child(“books”)',你会得到想要的路径吗? – Dravidian
感谢您回复@Dravidian。显然,没有任何错误。路径工作正常,我正在获取数据。但是,如果您看到我的JSON结构,我将书籍存储在每本书的标题下。所以我不确定如何调用每本书来检索其中的数据。在这种情况下,每本书都有一个唯一的名称。 – Miki
例如,我不能这样做: 'databaseRef.child( “用户”)子(?!(用户.uid))子( “书”).child( “书的NAME”)',因为书的名字各不相同。 – Miki