0

我试图在使用 googleSignIn 登录时显示登录用户的用户名。googleSignIn 已在 appdelegate 中设置,要显示的用户名位于启动登录的 viewController 中。

出于一个奇怪的原因,我可以“打印”从 appDelegate 传入的名称,但不能设置 UILable.text。就此而言,我什至无法将 UILabel.text 设置为 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()    
}
4

1 回答 1

0
  1. 确保 VC 持有正确的主视图控制器引用。您可以设置断点和调试。

  2. 确保welcomeLabel @IBoutlet 已连接。

  3. 您已将welcomeLabel 声明为非可选的,但在使用期间您正尝试将其解开,这可能是您出错的原因。尝试更改以下代码

    self.welcomeLabel?.text = name
    
     To
    
    self.welcomeLabel.text = name
    
于 2020-08-01T17:57:43.360 回答