Информация о профиле пользователя не отображается с использованием базы данных swift и firestore - PullRequest
0 голосов
/ 17 марта 2020

pi c базы данных Я пытаюсь показать ярлык со статусом пользователя на странице его профиля. после входа в систему пользователь получает V C с боковым меню. на этой стороне меню есть опция «профиль». однажды выбрав это, они go к своему контроллеру профиля. прямо сейчас мне просто нужно искать пользователей / текущий uid / "MembershipStatus" и представить этот результат в метке "welcomeLabel".

Я возвращаю nul

import UIKit

импорт Firebase

класс NonMemberProfileController: UIViewController {

    // MARK: - Properties

var welcomeLabel: UILabel = {
    let label = UILabel()
    label.textColor = .white
    label.font = UIFont.systemFont(ofSize: 28)
    label.translatesAutoresizingMaskIntoConstraints = false
    label.alpha = 0
    return label
}()

    // MARK: - Init

    override func viewDidLoad()
    {
            super.viewDidLoad()
            authenticateUserAndConfigureView()
    }

func loadUserData()
{
        guard let uid = Auth.auth().currentUser?.uid else {return}
                                            //.child("MembershipStatus")
    Database.database().reference().child("users").child(uid).observeSingleEvent(of: .value) {
        (snapshot) in
        if snapshot.hasChild("MembershipStatus"){
            print("true we have bingo")
        } else {
            print("no bueno")
            dump(snapshot)
        }

        guard let status = snapshot.value as? String else { return }
        self.welcomeLabel.text = "Welcome, \(status)"
        print("this is lkjfdskjklsfad" + status)
        UIView.animate(withDuration: 0.5, animations: {
            self.welcomeLabel.alpha = 1
        })
    }
}

func authenticateUserAndConfigureView(){
    if Auth.auth().currentUser == nil {
        DispatchQueue.main.async {
            let navController = UINavigationController(rootViewController: LoginViewController())
            navController.navigationBar.barStyle = .black
            self.present(navController, animated: true, completion: nil)
        }
    } else {
        configureNavigationBar()
        loadUserData()
    }
}

        // MARK: - Selectors

        @objc func handleDismiss() {
            dismiss(animated: true, completion: nil)
        }

        // MARK: - Helper Functions

        func configureNavigationBar() {
            view.backgroundColor = UIColor.lightGray
            navigationItem.title = "Profile"
            navigationController?.navigationBar.barTintColor = .darkGray
            navigationController?.navigationBar.barStyle = .black
            navigationItem.leftBarButtonItem = UIBarButtonItem(image: #imageLiteral(resourceName: "Home_2x").withRenderingMode(.alwaysOriginal), style: .plain, target: self, action: #selector(handleDismiss))
            navigationItem.rightBarButtonItem = UIBarButtonItem(image: #imageLiteral(resourceName: "baseline_settings_white_24dp").withRenderingMode(.alwaysOriginal), style: .plain, target: self, action: #selector(handleDismiss))
            view.addSubview(welcomeLabel)
            welcomeLabel.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
            welcomeLabel.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
        }
    }

1 Ответ

1 голос
/ 18 марта 2020

Вы используете Cloud Firestore для хранения данных, но ваш код читает данные из базы данных RealTime. Вы должны прочитать данные так:

let userRef = Firestore.firestore().collection("users").document(uid) 
userRef.getDocument { (documentSnapshot, error) in guard 
    let document = documentSnapshot?.data() else { 
        print(error)
        return 
    } 
    print(document) 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...