从 Firestore Swift 获取每个用户的文档

时间:2021-01-21 07:33:48

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

我正在尝试为每个登录到他的帐户的用户获取文档,我在 Firestore 中有两个集合,一个称为 ( firstName ),第二个称为 ( lastName ),我希望从用户 1 获取 ( firstName ) 集合仅和用户编号 2 仅获取 ( lastName ) 集合。

我尝试使用 if 语句,但它对我不起作用。

import UIKit
import FirebaseFirestore
import Firebase
import FirebaseAuth

class namesTableViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate {

@IBOutlet var names: UITableView!
var db: Firestore!
var firstName = [String]()
var lastName = [String]()


override func viewDidLoad() {
    super.viewDidLoad()
    
    
    names.register(UINib(nibName: "Order1TableViewCell", bundle: nil) , forCellReuseIdentifier: "order")
    
    names.dataSource = self
    names.delegate = self
    
    db = Firestore.firestore()

   

let storyboard = UIStoryboard(name: "Main", bundle: nil)
    guard let viewController1 = storyboard.instantiateViewController(withIdentifier: "login") as? logInViewController else{return}        
   viewController1.userNameField?.delegate = self

 
    if viewController1.userNameField?.text == “1@1.com" {
     loadData1()
    }

    if viewController1.userNameField?.text == “2@2.com” {
     loadData2()
    }
    
       

func loadData1() {
    db.collection("firstName").getDocuments()
    {
        (querySnapshot, err) in
        
        if let err = err
        {
            print("Error getting documents: \(err)");
        }
        else
        {
            for document in querySnapshot!.documents {
                
                self.firstName.append(document.get("firstname") as? String ?? "")
                self.lastName.append(document.get("lastname") as? String ?? "")
            }
        }
        self.names.reloadData()
    }
}




func loadData2() {
    db.collection("lastName").getDocuments()
    {
        (querySnapshot, err) in
        
        if let err = err
        {
            print("Error getting documents: \(err)");
        }
        else
        {
            
            for document in querySnapshot!.documents {
                self.firstName.append(document.get("firstname") as? String ?? "")
                self.lastName.append(document.get("lastname") as? String ?? "")
            }
        }
        self.names.reloadData()
    }
}
}

这是登录视图控制器代码

import UIKit
import Firebase
import FirebaseAuth

class logInViewController: UIViewController, UITextFieldDelegate {

@IBOutlet var userNameField: UITextField!
@IBOutlet var passwordField: UITextField!
@IBOutlet var logInButton: UIButton!


override func viewDidLoad() {
    
    logInButton.layer.cornerRadius = 4.0
    super.viewDidLoad()
    
    userNameField.delegate = self
    passwordField.delegate = self

    // Do any additional setup after loading the view.
}


@IBAction func logInButtonClicked(_ sender: Any) {
    
    Auth.auth().signIn(withEmail: (userNameField.text ?? ""), password: (passwordField.text ?? "")) { (result, error) in
              if let _eror = error{
                let alert = UIAlertController(title: "Error", message: error!.localizedDescription, preferredStyle: .alert)
                               let okAction = UIAlertAction(title: "Ok", style: .default, handler: nil)
                               alert.addAction(okAction)
                               self.present(alert,animated: true)
                  print(_eror.localizedDescription)
              }else{
                  if let _res = result{
                      print(_res)
                  }
                
                
               
                
        
                
                let VC1 = self.storyboard!.instantiateViewController(withIdentifier: "order1") as! namesTableViewController
                self.navigationController!.pushViewController(VC1, animated: true)
                
                
                
                
              }
          }
 }


}

这是火库结构 image

1 个答案:

答案 0 :(得分:0)

执行 let view1 = firstViewController() 时要小心,您获取的不是正确的 firstViewController 实例,而是您刚刚创建的实例。 User.text 因此不会被设置。您需要获取它的正确实例,如果您使用的是故事板,您可以这样做:

let storyboard = UIStoryboard(name: "nameofstoryboard", bundle: nil)
guard let viewController1 = storyboard.instantiateViewController(withIdentifier: "myIdentifier") as? firstViewController else{return} //set VC Identifier in Storyboard identity inspector

然后您可以使用 User

检查 if-statement 属性