1
これは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!) {
}
}
そして、次のように私は、ビューコントローラクラスからこのクラスを呼んでいる:
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.
}
これはサファリにGoogle認証を開きますが、問題は、デリゲートメソッドをGoogleLoginWrapperクラスで呼び出されることはありませんです。しかし、GoogleLoginWrapperで定義された同じコードをAppdelegateに入れても、それは機能します。なぜそれが起こっているのですか?
私は同じことを考えたので、上記のようなことをしました。更新されたコードを確認してください。それは動作しません。 –
その変更は何も修正しません。 'ViewController'クラスに' GoogleLoginWrapper'への参照を保持する必要があります。あなたの変更は後方にあり、弱い参照は問題を解決しません。 – rmaddy
暗黙のうちにアンラップされた弱参照は、単に問題を求めています。 – Paulw11