在自定义类中不调用Delegate方法

时间:2016-11-16 19:45:41

标签: ios swift delegates 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!) {
   }
}

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

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中定义的相同代码,它就可以了。为什么会这样?

1 个答案:

答案 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...实例的引用。