在自定义类中未调用委托方法

Bha*_*ain 2 delegates ios swift google-signin

这是我为Google登录创建的包装器类。

class GoogleLoginWrapper:NSObject, GIDSignInDelegate {

weak var presentingController:UIViewController!

init(presentingController:UIViewController) {
    super.init()
    self.presentingController = presentingController
    var configureError:NSError?
    GGLContext.sharedInstance().configureWithError(&configureError)
    GIDSignIn.sharedInstance().delegate = self
}

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

   }

    func sign(_ signIn: GIDSignIn!, didDisconnectWith user: GIDGoogleUser!, withError error: Error!) {
   }
}
Run Code Online (Sandbox Code Playgroud)

我从视图控制器类中调用该类,如下所示:

class ViewController: UIViewController,GIDSignInUIDelegate{

    override func viewDidLoad() {
         super.viewDidLoad()
         // Do any additional setup after loading the view, typically from a nib.

         let googleWrapper = GoogleLoginWrapper(presentingController: self)
    }

    //IBAction method to call google login.

}
Run Code Online (Sandbox Code Playgroud)

这将在safari上打开google身份验证,但问题是GoogleLoginWrapper类中从未调用委托方法。但是,如果我将在GoogleLoginWrapper中定义的相同代码放到Appdelegate中,它将起作用。为什么会这样呢?

rma*_*ddy 5

您的方法实例GoogleLoginWrapperviewDidLoad方法末尾超出范围,因此将立即释放。您无法sign...使用您发布的代码调用该函数。

您应该使用属性而不是局部变量来保留对GoogleLoginWrapper实例的引用。