2017-11-09 3 views
2

Swift와 Facebook AccountKit를 통합하기 위해 this 자습서를 따르고 있습니다. 거의 모든 것이 작동하지만 델리게이트 함수는 호출되지 않으며 왜 이런 일이 일어나는지 알 수 없습니다.Swift에서 Account Kit의 대리자 메소드를 호출 할 수 없습니다.

내 코드 :

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

I BELICE 신속한 버전 (나는이 튜토리얼 2.x를위한 생각) 함께 할 수있는 뭔가입니다하지만 난에서 유사한 코드를했다 스위프트 3의 예이며 작동 중입니다. 그래서 나는 무엇이 잘못되었는지 알지 못합니다.

답변

0

대리자 기능이 모두 비공개이며 AKFViewController가 호출 할 수없는 경우가 있습니다. 공개로 설정하고 콜백을받을 수 없는지 확인하십시오.

+0

그들은 공공 있었지만, 엑스 코드는 그 개인 (경고)하기 위해 나에게 말했다. – exsnake

2

메소드를 비공개로 설정할 필요는 없습니다. 다음

변경 위임 방법 :

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") 
} 
+1

처음에는 나에게 도움이되지는 않았지만, AccountKit보기 컨트롤러가 제공하는 뷰 컨트롤러가 deinitialized 상태가되어 AccountKit에서 다시 호출 할 필요가 없다는 것을 깨달았습니다. 일단 내가 그것을 해결, 위의 코드는 오류 또는 경고없이 일했다. – AlBeebe

관련 문제