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.
}
這將打開谷歌認證的Safari瀏覽器,但問題是委託方法永遠不會在GoogleLoginWrapper類調用。但是,如果我在Appdelegate中將GoogleLoginWrapper中定義的代碼放在同一個代碼中,它就可以工作。爲什麼會發生?
我以爲同樣的事情,所以我做了上面的事情。請檢查更新的代碼。它不起作用。 –
該更改不能解決任何問題。您需要在「ViewController」類中保留對「GoogleLoginWrapper」的引用。你的變化是倒退的,弱的參考不能解決問題。 – rmaddy
而一個隱含的解開的弱引用只是要求麻煩。 – Paulw11