Facebook 登录后 Swift 项目无法正确执行

问题描述 投票:0回答:1

初始ViewController,LoginViewController.swift:

import UIKit

class LoginViewController: UIViewController, FBSDKLoginButtonDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do view setup here.

        if (FBSDKAccessToken.currentAccessToken() != nil)
        {
            // User is already logged in, do work such as go to next view controller.
            performSegueWithIdentifier("loginSegue", sender: nil)
            print("segued due to login")
        }
        else
        {
            let loginView : FBSDKLoginButton = FBSDKLoginButton()
            self.view.addSubview(loginView)
            loginView.center = self.view.center
            loginView.readPermissions = ["public_profile", "user_friends"]
            loginView.delegate = self
        }
    }
    
    func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!) {
        print("User Logged In")
        if ((error) != nil)
        {
            // Process error
        }
        else if result.isCancelled {
            // Handle cancellations
        }
        else {
            // If you ask for multiple permissions at once, you
            // should check if specific permissions missing
            performSegueWithIdentifier("loginSegue", sender: nil)
            /*
            if result.grantedPermissions.contains("email")
            {
                // Do work
            }
            */
        }
    }
    
    func loginButtonDidLogOut(loginButton: FBSDKLoginButton!) {
        print("User Logged Out")
    }
    
}

每次启动应用程序时,都会将“segued due to login”打印到终端,因此显然已到达 if 语句以及 PerformSegueWithIdentifier() 行。然而,segue 实际上并没有执行,因为 LoginViewController 停留在屏幕上并且不显示下一个 ViewController。我也尝试添加行:

    performSegueWithIdentifier("loginSegue", sender: nil)

在其他几个位置,我知道程序正在到达,例如在 super.viewDidLoad() 之后。所以,问题似乎是特定于 segue 的,问题似乎与 Facebook 的登录无关。

这是带有 segue 属性的故事板屏幕截图:

xcode storyboard screenshot

如果需要,我可以包含其他文件。我怀疑这可能是与 this stackoverflow 问题类似的类型错误。我尝试删除所有 ViewController 中 UITextView 中的占位符,但这并没有解决问题。

swift segue facebook-login facebook-ios-sdk
1个回答
3
投票

好的,这就是您的应用程序:didFinishLaunching:withOptions 的样子。

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    // Override point for customization after application launch.
    FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)

    let mainStoryboard = UIStoryboard.init(name: "Main", bundle: nil)
    self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
    var initialViewController: UIViewController

    if(FBSDKAccessToken.currentAccessToken() != nil){
        let vc = mainStoryboard.instantiateViewControllerWithIdentifier("someOtherViewController") as! SomeOtherViewController
        initialViewController = vc
    }else{
        initialViewController = mainStoryboard.instantiateViewControllerWithIdentifier("loginViewController")
    }

    self.window?.rootViewController = initialViewController

    self.window?.makeKeyAndVisible()

    return true
}
© www.soinside.com 2019 - 2024. All rights reserved.