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