2016-10-01 38 views
2

我有一个应用程序,它包含主题和类别,一个类别可能属于一个或多个主题,我试图过滤数据以仅显示具有某个主题的类别ID标记为真,这是结构: enter image description here Categories with references to the topics ID.使用Firebase和Swift 3进行一对多查询

这里是(这是工作的雨燕2.3)的代码,我想出了:

self.ref = FIRDatabase.database().reference(fromURL: FIREBASE_URL).child("categories") 
let query = ref?.queryOrdered(byChild: "topics/idt2").queryEqual(toValue: true) 
query!.observe(.value, with: { (snapshot) in 
    //This should bring back both categories, Soccer and Moon 

    print("Inside query \(snapshot.value)") // Prints null 

}) 

任何想法?

+0

Fox下一个问题:您已经在您的问题中包含了JSON树的图片。请用实际的JSON替换为文本,您可以通过点击Firebase数据库控制台中的导出按钮轻松获取。将JSON作为文本可以搜索,使我们能够轻松使用它来测试您的实际数据,并将其用于我们的答案中,并且通常只是一件好事。 –

回答

3

当您对Firebase数据库执行查询时,可能会有多个结果。所以快照包含了这些结果的列表。即使只有一个结果,快照也会包含一个结果列表。

你需要在你的回调块来处理这个名单:

query!.observe(.value, with: { (snapshot) in 
    for child in snapshot.children { 
     print(child.key) 
    } 
}) 

另见:

+1

再次感谢您的帮助,只是一点细节,这段代码在Swift 3.0中不起作用,如果我错了,请纠正我的错误,但现在要使用快照中的值,首先将它转换为NSDictionary或NSArray,像这样:http://pastebin.com/f7q8kbvJ –