【发布时间】:2021-12-03 02:23:08
【问题描述】:
我已经在我的应用中实现了 Firebase。我可以按下一个按钮并将所需的数据发送到 Firebase。我还设置了一个表格视图,以便将所需的数据添加到表格视图中。但是,当任何用户按下按钮发送数据和更新表时,所有数据都会被拉出,甚至来自其他用户。似乎正在提取整个数据库,而不是特定于用户的数据库。我希望用户能够根据他们的 uid 而不是其他用户的 uid 获得他们输入/保存的干手选项。我认为这与这部分代码有关: let handDryLocations = ["id":key
我对这一切都很陌生,因此非常感谢任何帮助。代码如下:
import UIKit
import Firebase
import FirebaseDatabase
class HandDrySaveViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
var refHandrylocations: DatabaseReference!
@IBOutlet weak var BestOption: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(didGetNotification4(_:)), name: Notification.Name("text4"), object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(didGetNotification5(_:)), name: Notification.Name("text5"), object: nil)
if FirebaseApp.app() == nil {
FirebaseApp.configure()
}
refHandrylocations = Database.database().reference().child("users");
refHandrylocations.observe(DataEventType.value, with:{(snapshot) in
if snapshot.childrenCount>0{
self.handDryList.removeAll()
for handDryOptions in snapshot.children.allObjects as![DataSnapshot]{
let handDryObject = handDryOptions.value as? [String: AnyObject]
let handDryLocation = handDryObject?["handrylocation"]
let handDryBest = handDryObject?["handdrybest"]
let handDryString = handDryObject?["handdryoption"]
let handDryId = handDryObject?["id"]
let handDry = HandDryModel(id: handDryId as! String?, location: handDryLocation as! String?, best: handDryBest as! String?, options: handDryString as! String?)
self.handDryList.append(handDry)
}
self.handDryTable.reloadData()
}
})
// Do any additional setup after loading the view.
}
@IBAction func BacktoHDCalcButton(_ sender: UIButton) {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(identifier: "TowelVDryer")
vc.modalPresentationStyle = .overFullScreen
present(vc, animated: true)
}
func addHandDryLocation(){
let key = refHandrylocations.childByAutoId().key
let handDryLocations = ["id":key,
"handrylocation": HandDryLocation.text! as String,
"handdrybest" : BestOption.text! as String,
"handdryoption" : HandDryOptionsString.text! as String
]
refHandrylocations.child(key!).setValue(handDryLocations)
OptionSavedMessage.text = "Location Saved"
}
@IBOutlet weak var HandDryOptionsString: UILabel!
@IBOutlet weak var HandDryLocation: UITextField!
@IBOutlet weak var OptionSavedMessage: UILabel!
@IBAction func BackButton(_ sender: UIButton) {
}
@objc func didGetNotification4(_ notification: Notification){
let text = notification.object as! String?
HandDryOptionsString.text = text
}
@objc func didGetNotification5(_ notification: Notification){
let text = notification.object as! String?
BestOption.text = text
}
@IBAction func SaveHandDryButton(_ sender: UIButton) {
addHandDryLocation()
}
@IBOutlet weak var handDryTable: UITableView!
var handDryList = [HandDryModel]()
public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return handDryList.count
}
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! HandDrySavedTableViewCell
let handDry: HandDryModel
handDry = handDryList[indexPath.row]
cell.locationOfOption.text = handDry.location
cell.bestOption.text = handDry.best
cell.optionString.text = handDry.options
return cell
}
}
【问题讨论】:
-
谢谢。感谢您的帮助,但说实话,我不知道该怎么做。我尝试用您所说的内容替换您指出的两行代码并将“id”:key更改为“uid”:key,但这没有用。你介意再带我看看吗?
标签: swift firebase-realtime-database