这是我为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上打开google身份验证,但问题是在GoogleLoginWrapper类中永远不会调用委托方法。但是如果我在Appdelegate中使用GoogleLoginWrapper中定义的相同代码,它就可以了。为什么会这样?
答案 0 :(得分:4)
您的 $('#s').keyup(function(){
var valThis = $(this).val().toLowerCase();
$('.countryList>li').each(function(){
var text = $(this).text().toLowerCase();
(text.indexOf(valThis) == 0) ? $(this).show() : $(this).hide();
});
});
实例在GoogleLoginWrapper
方法结束时超出了范围,因此会立即取消分配。您无法使用您发布的代码调用viewDidLoad
函数。
您应该使用属性而不是局部变量来保留对sign...
实例的引用。