使用 PickerViewer 从 Firestore 过滤数据后,我无法将数据发送到另一个 VC
after filtering data from Firestore using a PickerViewer i'm not able to send the data to another VC
我有一个包含 3 行的 UIPickerViewer
,在从 Firestore
查询数据后,我希望能够将结果发送到另一个 VC 中的 TableView
。 Segue 工作但没有数据传输。不确定我错过了什么或我做错了什么。谢谢!
我能够将数据从 Firestore
直接检索到 TableView
,但是,当我使用 PickerView
过滤数据时,我无法将结果发送到 TableView
在单独的 VC 上。
@IBAction func getDataTapped(_ sender: Any) {
SVProgressHUD.show()
if HOSP != (hospnameTxt.text!) {
query =
Firestore.firestore().collection(PTLIST_REF).whereField("hosp",
isEqualTo: (hospnameTxt.text!))
} else if TEAM != teamnameTxt.text {
query =
Firestore.firestore().collection(PTLIST_REF).whereField("team",
isEqualTo: (teamnameTxt.text!))
} else if ASSIGNEDMD != provnameTxt.text {
query =
Firestore.firestore().collection(PTLIST_REF).whereField("assignedmd",
isEqualTo: (provnameTxt.text!))
}
query.getDocuments { (snapshot, error) in
if let err = error {
debugPrint("error getting data: \(err)")
} else {
guard let snap = snapshot else { return }
for document in snap.documents {
let data = document.data()
let assigneddate = data[ASSIGNEDDATE] as? String ?? ""
let assignedmd = data[ASSIGNEDMD] as? String ?? ""
let officemd = data[OFFICEMD] as? String ?? ""
let ptname = data[PTNAME] as? String ?? ""
let room = data[ROOM] as? String ?? ""
let seenosee = data[SEENOSEE] as? String ?? ""
let newPtList = PTList(assigneddate: assigneddate,
assignedmd: assignedmd, officemd: officemd, ptname: ptname, room:
room, seenosee: seenosee)
self.ptlists.append(newPtList)
print(document.data())
}
//self.TableView.reloadData()
}
self.performSegue(withIdentifier: "gotoresults", sender: self)
}
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "gotoresults" {
let vc = segue.destination as! resultsdataVC
vc.ptlists = ptlists
SVProgressHUD.dismiss()
}
}
结果数据VC
class resultsdataVC: UIViewController, UITableViewDataSource,
UITableViewDelegate {
@IBOutlet weak var tableView: UITableView!
var ptlist: PTList!
var ptlists = [PTList]()
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
}
func tableView(_ tableView: UITableView, numberOfRowsInSection
section: Int) -> Int {
return ptlists.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath:
IndexPath) -> UITableViewCell {
if let cell = tableView.dequeueReusableCell(withIdentifier:
"ptlistCell", for: indexPath)
as? ptlistCell {
cell.configureCell(ptlist: ptlists[indexPath.row])
return cell
}
return UITableViewCell()
}
}
ptlistCell
class ptlistCell: UITableViewCell {
@IBOutlet private weak var ptnameLbl: UILabel!
@IBOutlet private weak var assignedmdLbl: UILabel!
@IBOutlet private weak var officemdLbl: UILabel!
@IBOutlet private weak var roomnumberLbl: UILabel!
@IBOutlet private weak var seenoseeLbl: UILabel!
@IBOutlet private weak var assigneddateLbl: UILabel!
private var ptlist: PTList!
override func awakeFromNib() {
super.awakeFromNib()
}
func configureCell(ptlist: PTList) {
ptnameLbl.text = ptlist.ptname
assignedmdLbl.text = ptlist.assignedmd
officemdLbl.text = ptlist.officemd
roomnumberLbl.text = ptlist.room
seenoseeLbl.text = ptlist.seenosee
assigneddateLbl.text = ptlist.assigneddate
}
@IBAction func ptdataTapped(_ sender: Any) {
}
在 prepare(for segue:
中调用 firebase 为时已晚,Segue 在从 firebase 获取数据之前完成,因为它是异步的,所以
@IBAction func getDataTapped(_ sender: Any) {
firebaseCall {
// inside it the segue and the data is fetched successfully
performSegue(withIdentifier: "gotoresults", sender: self)
}
}
func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "gotoresults" {
let vc = segue.destination as! resultsdataVC
vc.data = data // set any data here
}
}
编辑:
@IBAction func getDataTapped(_ sender: Any) {
if HOSP != (hospnameTxt.text!) {
query =
Firestore.firestore().collection(PTLIST_REF).whereField("hosp",
isEqualTo: (hospnameTxt.text!))
} else if TEAM != teamnameTxt.text {
query =
Firestore.firestore().collection(PTLIST_REF).whereField("team",
isEqualTo: (teamnameTxt.text!))
} else if ASSIGNEDMD != provnameTxt.text {
query =
Firestore.firestore().collection(PTLIST_REF).whereField("assignedmd",
isEqualTo: (provnameTxt.text!))
}
query.getDocuments { (snapshot, error) in
if let err = error {
debugPrint("error getting data: \(err)")
} else {
guard let snap = snapshot else { return }
for document in snap.documents {
let data = document.data()
let assigneddate = data[ASSIGNEDDATE] as? String ?? ""
let assignedmd = data[ASSIGNEDMD] as? String ?? ""
let officemd = data[OFFICEMD] as? String ?? ""
let ptname = data[PTNAME] as? String ?? ""
let room = data[ROOM] as? String ?? ""
let seenosee = data[SEENOSEE] as? String ?? ""
let newPtList = PTList(assigneddate: assigneddate,
assignedmd: assignedmd, officemd: officemd, ptname: ptname, room:
room, seenosee: seenosee)
self.ptlists.append(newPtList)
print(document.data())
}
}
performSegue(withIdentifier: "gotoresults", sender: self)
}
}
func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "gotoresults" {
let vc = segue.destination as! resultsdataVC
vc.ptlists = ptlists
}
}
}
我有一个包含 3 行的 UIPickerViewer
,在从 Firestore
查询数据后,我希望能够将结果发送到另一个 VC 中的 TableView
。 Segue 工作但没有数据传输。不确定我错过了什么或我做错了什么。谢谢!
我能够将数据从 Firestore
直接检索到 TableView
,但是,当我使用 PickerView
过滤数据时,我无法将结果发送到 TableView
在单独的 VC 上。
@IBAction func getDataTapped(_ sender: Any) {
SVProgressHUD.show()
if HOSP != (hospnameTxt.text!) {
query =
Firestore.firestore().collection(PTLIST_REF).whereField("hosp",
isEqualTo: (hospnameTxt.text!))
} else if TEAM != teamnameTxt.text {
query =
Firestore.firestore().collection(PTLIST_REF).whereField("team",
isEqualTo: (teamnameTxt.text!))
} else if ASSIGNEDMD != provnameTxt.text {
query =
Firestore.firestore().collection(PTLIST_REF).whereField("assignedmd",
isEqualTo: (provnameTxt.text!))
}
query.getDocuments { (snapshot, error) in
if let err = error {
debugPrint("error getting data: \(err)")
} else {
guard let snap = snapshot else { return }
for document in snap.documents {
let data = document.data()
let assigneddate = data[ASSIGNEDDATE] as? String ?? ""
let assignedmd = data[ASSIGNEDMD] as? String ?? ""
let officemd = data[OFFICEMD] as? String ?? ""
let ptname = data[PTNAME] as? String ?? ""
let room = data[ROOM] as? String ?? ""
let seenosee = data[SEENOSEE] as? String ?? ""
let newPtList = PTList(assigneddate: assigneddate,
assignedmd: assignedmd, officemd: officemd, ptname: ptname, room:
room, seenosee: seenosee)
self.ptlists.append(newPtList)
print(document.data())
}
//self.TableView.reloadData()
}
self.performSegue(withIdentifier: "gotoresults", sender: self)
}
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "gotoresults" {
let vc = segue.destination as! resultsdataVC
vc.ptlists = ptlists
SVProgressHUD.dismiss()
}
}
结果数据VC
class resultsdataVC: UIViewController, UITableViewDataSource,
UITableViewDelegate {
@IBOutlet weak var tableView: UITableView!
var ptlist: PTList!
var ptlists = [PTList]()
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
}
func tableView(_ tableView: UITableView, numberOfRowsInSection
section: Int) -> Int {
return ptlists.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath:
IndexPath) -> UITableViewCell {
if let cell = tableView.dequeueReusableCell(withIdentifier:
"ptlistCell", for: indexPath)
as? ptlistCell {
cell.configureCell(ptlist: ptlists[indexPath.row])
return cell
}
return UITableViewCell()
}
}
ptlistCell
class ptlistCell: UITableViewCell {
@IBOutlet private weak var ptnameLbl: UILabel!
@IBOutlet private weak var assignedmdLbl: UILabel!
@IBOutlet private weak var officemdLbl: UILabel!
@IBOutlet private weak var roomnumberLbl: UILabel!
@IBOutlet private weak var seenoseeLbl: UILabel!
@IBOutlet private weak var assigneddateLbl: UILabel!
private var ptlist: PTList!
override func awakeFromNib() {
super.awakeFromNib()
}
func configureCell(ptlist: PTList) {
ptnameLbl.text = ptlist.ptname
assignedmdLbl.text = ptlist.assignedmd
officemdLbl.text = ptlist.officemd
roomnumberLbl.text = ptlist.room
seenoseeLbl.text = ptlist.seenosee
assigneddateLbl.text = ptlist.assigneddate
}
@IBAction func ptdataTapped(_ sender: Any) {
}
在 prepare(for segue:
中调用 firebase 为时已晚,Segue 在从 firebase 获取数据之前完成,因为它是异步的,所以
@IBAction func getDataTapped(_ sender: Any) {
firebaseCall {
// inside it the segue and the data is fetched successfully
performSegue(withIdentifier: "gotoresults", sender: self)
}
}
func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "gotoresults" {
let vc = segue.destination as! resultsdataVC
vc.data = data // set any data here
}
}
编辑:
@IBAction func getDataTapped(_ sender: Any) {
if HOSP != (hospnameTxt.text!) {
query =
Firestore.firestore().collection(PTLIST_REF).whereField("hosp",
isEqualTo: (hospnameTxt.text!))
} else if TEAM != teamnameTxt.text {
query =
Firestore.firestore().collection(PTLIST_REF).whereField("team",
isEqualTo: (teamnameTxt.text!))
} else if ASSIGNEDMD != provnameTxt.text {
query =
Firestore.firestore().collection(PTLIST_REF).whereField("assignedmd",
isEqualTo: (provnameTxt.text!))
}
query.getDocuments { (snapshot, error) in
if let err = error {
debugPrint("error getting data: \(err)")
} else {
guard let snap = snapshot else { return }
for document in snap.documents {
let data = document.data()
let assigneddate = data[ASSIGNEDDATE] as? String ?? ""
let assignedmd = data[ASSIGNEDMD] as? String ?? ""
let officemd = data[OFFICEMD] as? String ?? ""
let ptname = data[PTNAME] as? String ?? ""
let room = data[ROOM] as? String ?? ""
let seenosee = data[SEENOSEE] as? String ?? ""
let newPtList = PTList(assigneddate: assigneddate,
assignedmd: assignedmd, officemd: officemd, ptname: ptname, room:
room, seenosee: seenosee)
self.ptlists.append(newPtList)
print(document.data())
}
}
performSegue(withIdentifier: "gotoresults", sender: self)
}
}
func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "gotoresults" {
let vc = segue.destination as! resultsdataVC
vc.ptlists = ptlists
}
}
}