【发布时间】:2017-02-25 07:51:34
【问题描述】:
我目前正在开发一款葡萄酒搜索器应用程序。基本上,我用食物搭配葡萄酒。用户选择他最喜欢的食物。我有我的 firebase 数据库存储带有特定葡萄酒名称和类型的葡萄酒数据。这是我在 firebase 中的 json 结构。
Wines:
Wine1:
Name: Catena Zapata Malbec
Type: Bold Red
Wine2:
.......... etc.
我有另一个以前的视图控制器用于选择最喜欢的食物。例如,如果用户选择红肉,则相关输入将是“Bold Red”。 所以,我做了一个 switch case,对于 case:1(这是选择的红肉),参考进入“类型”并搜索“Bold Red”,最后打印出该红酒的所有相关结果。
class Wine: NSObject{
var name: String?
var type: String?
var foodChoice: String?
}
class ResultViewController: UITableViewController {
var ref: FIRDatabaseReference!
var refHandle: UInt!
var wineList = [Wine]()
var intPassed: Int!
let cellId = "cellId"
override func viewDidLoad() {
super.viewDidLoad()
navigationItem.title = "Results"
ref = FIRDatabase.database().reference()
fetchWine()
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return wineList.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell(style: .subtitle, reuseIdentifier: cellId)
cell.textLabel?.text = wineList[indexPath.row].name
return cell
}
func fetchWine(){
switch intPassed {
case 0:
refHandle = ref.child("Wines").observe(.childAdded, with: { (snapshot) in
if let dictionary = snapshot.value as? [String: AnyObject] {
let wine = Wine()
wine.name = dictionary["name"] as! String?
wine.type = dictionary["type"] as! String?
wine.setValuesForKeys(dictionary)
self.wineList.append(wine)
print (wine.name, wine.type)
DispatchQueue.main.async {
self.tableView.reloadData()
}
}
})
case 1:
refHandle = ref.queryOrdered(byChild: "Type").queryEqual(toValue: "Bold Red").observe(.value, with: {(snapshot) in
if let dictionary = snapshot.value as? [String: AnyObject] {
let wine = Wine()
wine.name = dictionary["name"] as! String?
wine.setValuesForKeys(dictionary)
self.wineList.append(wine)
print (wine.name)
DispatchQueue.main.async {
self.tableView.reloadData()
}
}
})
default:
print("nothing")
}
}
}
我可以打印案例 0 的数据。但是如果我想将所选类型的答案与数据库中的类型进行比较,我无法获得我想要的数据。是不是 refHandle 的引用错了?
这是为案例 0 打印的结果。我只需要确保 firebase 正常工作。其他选项只是我数据库中的其他葡萄酒。
0
Optional("Catena Zapata Malbec") Optional("Bold Red")
Optional("Merlot") Optional("Medium Red")
Optional("Pinot Noir") Optional("Light Red")
请帮忙!非常感谢!!
【问题讨论】:
-
您不需要在 fetchWine 函数中使用 intPassed(除非它是类定义的,否则它无论如何都是无效的,在这种情况下它将是 self.intPassed)。松开 DispatchQueue,因为它们不需要。
标签: swift firebase swift3 firebase-realtime-database