我刚接触编码,到目前为止只知道一点Swift。 我搜索了很多,但我没有找到这个确切的问题。
当用户按下按钮(按钮提供“新”信息)时,我需要在(详细)视图中重新加载各种相关项目。
所以,如果我有:
“标题1” “一些信息1” “按钮:”title3“”
我想按“按钮”,然后获取:
“TITLE3” “一些信息3” “按钮:”title5“”
我的Firebase数据结构是:
我曾经使用过Parse,一切都很好。在下面的代码中,我按一个按钮,然后使用按钮上的信息作为PFObject,运行基于此PFObject的查询并重新加载视图。简单。 (见例1)。
但是在 Firebase 我真的很挣扎,(我认为它与我对数组和词典的有限理解有关...?)所以我已经从tableview发送了正确的数据到了detailview,一切都很好,工作。
但是现在我想使用“来自button2的输入,从Firebase获取相应的数据然后刷新视图。(在Example2中尝试了一些代码) 我意识到Parse和Firebase的工作方式完全不同,但我感觉我与example2并不是那么遥远,但我可能会这样。
感谢任何帮助。
示例1.使用Parse的旧代码
/*
==========================================================================================
//MARK: START OF CODE THAT MAKES BUTTONS LOAD DATA FROM PARSE
==========================================================================================
*/
@IBAction func friend1(sender: AnyObject) {
// Queries Parse to find the bottle that matches the button label when we press the button. Reloads the detail view with info from Parse
let query = PFQuery(className:"whisky")
query.whereKey("friendName1", equalTo: (friend1.titleLabel?.text)!)
query.getFirstObjectInBackgroundWithBlock {
(newBottle: PFObject?, error: NSError?) -> Void in
if error == nil && newBottle != nil {
//write to array
self.testBackButton.append(self.currentObject!["friendName1"] as! String!)
//self.testBackButton.append((self.friend1.titleLabel?.text)!)
print(self.testBackButton)
//end write to array
self.currentObject = newBottle
self.viewDidLoad()
//self.viewWillAppear(true)
} else {
print(error)
}
}
}
示例2:尝试从Firebase执行相同操作
@IBAction func friend1(sender: AnyObject) {
print("hubabba")
//dbRef.child("Results").queryOrdered(byChild: "friendName2").queryEqual(toValue: "friendName2" as? String).observe(FIRDataEventType.childAdded, with: {(_ snapshot: FIRDataSnapshot) ->
dbRef.child("Results").queryEqual(toValue: "friendName2").observe(FIRDataEventType.childAdded, with: {(_ snapshot: FIRDataSnapshot) ->Void in
// This will fire for each matching child node.
var score = snapshot.value
//var newScore = score["friendName2"]
print("Retrieved: \(score)")
self.detailWhisky = score as? WhiskyItem
self.viewDidLoad()
/*
//test -1
来自详细视图顶部的一些支持代码
var detailWhisky: WhiskyItem?
//Firebase
var dbRef:FIRDatabaseReference!
答案 0 :(得分:0)
以下代码解决了这个问题:
@IBAction func friend2Button(_ sender: Any) {
ref.queryOrdered(byChild: "friendName1").queryEqual(toValue: self.friend2.titleLabel?.text).observe(.value, with: { snapshot in
if snapshot.value is NSNull {
print("Ingen treff i soeket")
} else {
for child in snapshot.children {
let newWhisky = WhiskyItem(snapshot: child as! FIRDataSnapshot)
self.detailWhisky = newWhisky
self.viewDidLoad()
}}})}