Reputation:
I'm new to development and im using Firestore in my application, my goal is to get data from Firestore when the user writes "Hello World"
in the textField. I managed to get data from the Firestore and everything is fine but when I use the if
statement the function not launch the code.
this is my code without using if
statement and it works 100%
import UIKit
import FirebaseFirestore
import Firebase
import FirebaseAuth
class orderTableViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate {
@IBOutlet var order: UITableView!
@IBOutlet var userNameField: UITextField!
var db: Firestore!
let DocRefernce:DocumentReference! = nil
var street = [String]()
var firstName = [String]()
var lastName = [String]()
var blockNumber = [String]()
var phone = [String]()
var houseNumber = [String]()
var block = [String]()
var Area = [String]()
override func viewDidLoad() {
super.viewDidLoad()
order.register(UINib(nibName: "Order1TableViewCell", bundle: nil) , forCellReuseIdentifier: "order")
order.separatorStyle = .none
order.dataSource = self
order.delegate = self
db = Firestore.firestore()
self.navigationItem.setHidesBackButton(true, animated: true)
loadData1()
loadData2()
}
func loadData1() {
db.collection("Hi").getDocuments()
{
(querySnapshot, err) in
if let err = err
{
print("Error getting documents: \(err)");
}
else
{
for document in querySnapshot!.documents {
print("\(document.documentID) => \(document.data())");
self.firstName.append(document.get("firstname") as? String ?? "")
self.lastName.append(document.get("lastname") as? String ?? "")
self.street.append(document.get("street") as? String ?? "")
self.blockNumber.append(document.get("blockNumber") as? String ?? "")
self.Area.append(document.get("area") as? String ?? "")
self.phone.append(document.get("phone") as? String ?? "")
self.houseNumber.append(document.get("houseNumber") as? String ?? "")
}
}
self.order.reloadData()
}
}
func loadData2() {
db.collection("hola").getDocuments()
{
(querySnapshot, err) in
if let err = err
{
print("Error getting documents: \(err)");
}
else
{
for document in querySnapshot!.documents {
print("\(document.documentID) => \(document.data())");
self.firstName.append(document.get("firstname") as? String ?? "")
self.lastName.append(document.get("lastname") as? String ?? "")
self.street.append(document.get("street") as? String ?? "")
self.blockNumber.append(document.get("blockNumber") as? String ?? "")
self.Area.append(document.get("area") as? String ?? "")
self.phone.append(document.get("phone") as? String ?? "")
self.houseNumber.append(document.get("houseNumber") as? String ?? "")
}
}
self.order.reloadData()
}
}
}
and this is the code where I use if
statement but I couldn't manage to get data from the Firestore.
import UIKit
import FirebaseFirestore
import Firebase
import FirebaseAuth
class orderTableViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate {
@IBOutlet var order: UITableView!
@IBOutlet var userNameField: UITextField!
var db: Firestore!
// let DocRefernce:DocumentReference! = nil
var street = [String]()
var firstName = [String]()
var lastName = [String]()
var blockNumber = [String]()
var phone = [String]()
var houseNumber = [String]()
var block = [String]()
var Area = [String]()
override func viewDidLoad() {
super.viewDidLoad()
userNameField.delegate = self
order.register(UINib(nibName: "Order1TableViewCell", bundle: nil) , forCellReuseIdentifier: "order")
order.separatorStyle = .none
order.dataSource = self
order.delegate = self
db = Firestore.firestore()
self.navigationItem.setHidesBackButton(true, animated: true)
if userNameField.text == "Hello World" {
loadData1()
} else {
loadData2()
}
}
func loadData1() {
db.collection("Hi").getDocuments()
{
(querySnapshot, err) in
if let err = err
{
print("Error getting documents: \(err)");
}
else
{
for document in querySnapshot!.documents {
print("\(document.documentID) => \(document.data())");
self.firstName.append(document.get("firstname") as? String ?? "")
self.lastName.append(document.get("lastname") as? String ?? "")
self.street.append(document.get("street") as? String ?? "")
self.blockNumber.append(document.get("blockNumber") as? String ?? "")
self.Area.append(document.get("area") as? String ?? "")
self.phone.append(document.get("phone") as? String ?? "")
self.houseNumber.append(document.get("houseNumber") as? String ?? "")
}
}
self.order.reloadData()
}
}
func loadData2() {
db.collection("hola").getDocuments()
{
(querySnapshot, err) in
if let err = err
{
print("Error getting documents: \(err)");
}
else
{
for document in querySnapshot!.documents {
print("\(document.documentID) => \(document.data())");
self.firstName.append(document.get("firstname") as? String ?? "")
self.lastName.append(document.get("lastname") as? String ?? "")
self.street.append(document.get("street") as? String ?? "")
self.blockNumber.append(document.get("blockNumber") as? String ?? "")
self.Area.append(document.get("area") as? String ?? "")
self.phone.append(document.get("phone") as? String ?? "")
self.houseNumber.append(document.get("houseNumber") as? String ?? "")
}
}
self.order.reloadData()
}
}
}
Upvotes: 0
Views: 105
Reputation: 951
Here's my solution that has already been briefly explained in the comment.
override func viewDidLoad() {
super.viewDidLoad()
// The rest of your code besides that if statement should go in here...
userNameField.delegate = self
}
extension orderTableViewController: UITextFieldDelegate {
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
// This is where your if statement goes
if textField.text == "Hello World" {
loadData1()
} else {
loadData2()
}
}
}
Upvotes: 1