【问题标题】:retrieve data from firestore if textField has specific text swift如果 textField 有特定的文本 swift 从 firestore 检索数据
【发布时间】:2021-04-25 23:05:41
【问题描述】:

我是开发新手,我在我的应用程序中使用 Firestore,我的目标是当用户在 textField 中写入 "Hello World" 时从 Firestore 获取数据。我设法从 Firestore 获取数据,一切都很好,但是当我使用 if 语句时,函数不会启动代码。

这是我的代码,没有使用 if 语句,它可以 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()
    }
   }

 }

这是我使用 if 语句的代码,但我无法从 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()
    }
 }
}

【问题讨论】:

  • if 语句位于 viewDidLoad 方法中,这意味着其中的代码只会在应用程序启动时执行,因此您的 textField 中不会包含任何文本。您必须在 textField 的委托中执行此检查过程,一旦用户将一些文本放入其中并点击返回按钮/以任何其他方式退出它。如果这就是您要查找的内容,我可以在下面提供完整的解释 - 只需回复此评论即可。

标签: arrays swift firebase google-cloud-firestore firebase-authentication


【解决方案1】:

这是我已经在评论中简要解释过的解决方案。

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()
        }
    }
}

【讨论】:

  • 我试过了,但它对我不起作用,是否有另一种方法可以为特定用户从 firestore 检索数据?
  • 检索部分完全由您设计。您说您的代码在第一个示例中有效,但在第二个示例中却没有。我可以帮助您编写检索所述数据的代码,但这超出了这个问题。我的代码中是否存在阻止它执行的错误?你说我没有为你工作,但你有没有得到任何输出,或者它只是没有工作。 @mohammedbasheer
  • 我认为您给我的解决方案与第二个示例相同,我尝试了所有这些但没有一个适合我:(
  • 我建议你尝试在textFieldShouldReturn() 中调试代码。它是否执行,如果没有,问题出在哪里?如果它不是机密的,那么在 GitHub 上用这个项目创建一个 repo 会很有好处。这将允许我和其他人在找到解决方案后快速确定错误并提交拉取请求。我也很乐意为 PR 提供一个完整的解释,因为我知道为了它的工作而修复代码对你来说并不是一个好的学习体验。请考虑这种方法@mohammedbasheer。
猜你喜欢
  • 1970-01-01
  • 2018-11-06
  • 1970-01-01
  • 1970-01-01
  • 2019-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多