我有一个混合的 Swift 和 Objective C 应用程序。swift 应用程序使用一些 ObjectiveC 库来处理 OAuth2 身份验证。一旦对令牌的 OAuth2 请求完成,其中一部分是对委托方法的回调。
以下代码正在使用我传入的选择器的 Objective C 库 (GTMOAuth2) 中执行:
if (delegate_ && finishedSelector_) {
SEL sel = finishedSelector_;
NSMethodSignature *sig = [delegate_ methodSignatureForSelector:sel];
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:sig];
[invocation setSelector:sel];
[invocation setTarget:delegate_];
[invocation setArgument:&self atIndex:2];
[invocation setArgument:&auth atIndex:3];
[invocation setArgument:&error atIndex:4];
[invocation invoke];
}
我想调用的函数在我的 swift viewController 中,看起来像这样:
func authentication(viewController: GTMOAuth2ViewControllerTouch, finishedWithAuth: GTMOAuth2Authentication, error: NSError)
{
if (error != nil)
{
var alertView: UIAlertView = UIAlertView(title: "Authorisation Failed", message: error.description, delegate: self, cancelButtonTitle: "Dismiss")
alertView.show()
}
else
{
// Authentication Succeeded
self.mytoken = finishedWithAuth.accessToken
}
}
我目前传入的选择器是:
let mySelector: Selector = Selector("authentication:viewController:finishedWithAuth:error:")
并在此调用中用作参数:
let myViewController: GTMOAuth2ViewControllerTouch = GTMOAuth2ViewControllerTouch(authentication: auth, authorizationURL: authURL, keychainItemName: nil, delegate: self, finishedSelector: mySelector)
谁能告诉我为什么我的函数永远不会被调用?它似乎总是在创建 NSInvocation 的那一行失败。
我尝试了多个选择器字符串,但每个字符串似乎都失败了。我错过了什么吗?
我也尝试将“@objc”放在函数名称前面,但无济于事。