didSet не обновляет UILabel.text с данными asyn c - PullRequest
0 голосов
/ 28 мая 2020

Я пытаюсь показать имя пользователя вошедшего в систему при входе с помощью googleSignIn. GoogleSignIn был настроен в appdelegate, а отображаемое имя пользователя находится в viewController, который запускает вход.

По странной причине я могу «распечатать» имя, которое передается из appDelegate, но не установите UILable.text. В этом отношении я даже не могу установить для UILabel.text какое-либо содержимое stati c внутри didSet.

//APP DELEGATE
    var vc: ViewController?

    func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) {

        if let error = error {
           if (error as NSError).code == GIDSignInErrorCode.hasNoAuthInKeychain.rawValue {
             print("The user has not signed in before or they have since signed out.")
           } else {
             print("\(error.localizedDescription)")
           }
           return
         }
        vc?.userID = user.profile.name
        // Perform any operations on signed in user here.
        let userId = user.userID                  // For client-side use only!
    }


// MAIN VIEW CONTROLLER

    var userID: String? {
        didSet{
            DispatchQueue.main.async {
                if let name = self.userID {
                self.welcomeLabel?.text = name
            }
            }
        }
    }

    @IBOutlet weak var welcomeLabel: UILabel!

  override func viewDidLoad() {
        super.viewDidLoad()
        GIDSignIn.sharedInstance()?.presentingViewController = self
        GIDSignIn.sharedInstance()?.restorePreviousSignIn()    
}

1 Ответ

0 голосов
/ 01 августа 2020
  1. Убедитесь, что V C содержит правильную ссылку на контроллер главного представления. Вы можете установить точку останова и отладить.

  2. убедитесь, что welcomeLabel @IBoutlet подключен.

  3. Вы объявили свой welcomeLabel как необязательный но во время его использования вы пытаетесь развернуть его, что может быть причиной вашей ошибки. Попробуйте изменить приведенный ниже код

    self.welcomeLabel?.text = name
    
     To
    
    self.welcomeLabel.text = name
    
...