2

我正在按照教程将 Facebook AccountKit 与 Swift 集成。几乎一切正常,但没有调用委托函数,我不知道为什么没有发生这种情况。

我的代码:

import UIKit
import AccountKit

class LoginViewController: UIViewController,AKFViewControllerDelegate {

    //
    var _accountKit: AKFAccountKit?
    var _pendingLoginViewController: AKFViewController?
    var _authorizationCode: String?

    //
    override func viewDidLoad() {
        super.viewDidLoad()
        if _accountKit == nil {
            _accountKit = AKFAccountKit(responseType: .accessToken)
        }
        _pendingLoginViewController = _accountKit!.viewControllerForLoginResume()
        _pendingLoginViewController?.delegate = self
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func prepareLoginViewController(loginViewController: AKFViewController) {
        loginViewController.delegate = self
    }

    @IBAction func loginWithPhone(_ sender: UIButton) {
        let inputState = NSUUID().uuidString
        let vc: AKFViewController = _accountKit!.viewControllerForPhoneLogin(with: nil, state: inputState)
        self.prepareLoginViewController(loginViewController: vc)
        self.present(vc as! UIViewController, animated: true, completion: nil)

    }


    private func viewController(viewController: UIViewController!, didCompleteLoginWithAuthorizationCode code: String!, state: String!) {
        print("1")
    }

    private func viewController(viewController: UIViewController!, didCompleteLoginWithAccessToken accessToken: AKFAccessToken!, state: String!) {
        print("2")
    }

    private func viewController(viewController: UIViewController!, didFailWithError error: Error!) {
        print("3")
    }

    private func viewControllerDidCancel(viewController: UIViewController!) {
        print("4")
    }

}

斯威夫特版本:3.2

我认为这与 swift 版本有关(我相信本教程适用于 2.x),但我在 Swift 3 中的示例中有类似的代码并且正在运行。所以我不知道出了什么问题。

4

2 回答 2

4

您不需要将方法更改为私有。

将委托方法更改为以下内容:

func viewController(_ viewController: (UIViewController & AKFViewController)!, 
didCompleteLoginWith accessToken: AKFAccessToken!, state: String!) {
}

func viewController(_ viewController: (UIViewController & AKFViewController)!, didCompleteLoginWithAuthorizationCode code: String!, state: String!) {

}

func viewController(_ viewController: (UIViewController & AKFViewController)!, didFailWithError error: Error!) {

}

func viewControllerDidCancel(_ viewController: (UIViewController & AKFViewController)!) {
    print("canceled")
}
于 2017-11-11T12:58:59.173 回答
0

问题可能是您的委托函数都是私有的,因此 AKFViewController 无法调用它们。尝试将它们公开,看看您是否仍然无法获得回调

于 2017-11-09T23:37:41.300 回答