Swift和Facebook登录:我的UIViewController不符合FBSDKLoginButtonDelegate

big*_*ree 10 facebook ios swift

即使Facebook教程说不需要标题,我在.swift文件中通过简单的导入框架添加FBSDK功能时遇到了问题.

所以,我遵循了这个教程:http: //www.brianjcoleman.com/tutorial-how-to-use-login-in-facebook-sdk-4-0-for-swift/ 使用swift 6.3 SDK Facebook 4.1 SDK

但我有两个问题

FBLoginViewViewController does not conform to FBSDKLoginButtonDelegate

Cannot assign a value of type 'FBLoginViewViewController' to a value
of type 'FBSDKLoginButtonDelegate!'
Run Code Online (Sandbox Code Playgroud)

所以我无法登录,我尝试删除import语句,没有改变,我也在appDelegate中实现了每个语句,一切都应该没问题,但仍然......

提前致谢

 //
//  FBLoginViewViewController.swift
//  SocialFBLogin
//
//  Created by XXXX XXXX on 18/05/15.
//  Copyright (c) 2015 XXXX XXXX. All rights reserved.
//

import UIKit

import FBSDKCoreKit
import FBSDKShareKit
import FBSDKLoginKit



//@objc(FBLoginViewViewController)
class FBLoginViewViewController: UIViewController, FBSDKLoginButtonDelegate     {



@IBOutlet weak var FBLoginPicture: UIImageView!
@IBOutlet weak var FBLoginNameLabel: UILabel!

override func viewDidLoad() {


    super.viewDidLoad()
    // Do any additional setup after loading the view.

    if (FBSDKAccessToken.currentAccessToken() != nil)
    {
        // User is already logged in, do work such as go to next view controller.
    }
    else
    {
        let loginView : FBSDKLoginButton = FBSDKLoginButton()
        self.view.addSubview(loginView)
        loginView.center = self.view.center
        loginView.readPermissions = ["public_profile", "email", "user_friends"]
        loginView.delegate = self
    }

    // Facebook Delegate Methods

    func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!) {
        println("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
            if result.grantedPermissions.contains("email")
            {
                // Do work
            }
        }
    }

    func loginButtonDidLogOut(loginButton: FBSDKLoginButton!) {
        println("User Logged Out")
    }


}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}
}
Run Code Online (Sandbox Code Playgroud)

Rap*_*uza 30

先生,我刚刚解决了这个问题!你必须使你的viewController符合FBSDKLoginButtonDelegate.首先,将它添加到您的协议中,如下所示:

class MainView: UIViewController, UITableViewDataSource, UITableViewDelegate, FBSDKLoginButtonDelegate 
{
    //Your Code
}
Run Code Online (Sandbox Code Playgroud)

要符合此协议,您必须实现以下两种方法:

func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!) {
    println("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
        if result.grantedPermissions.contains("email")
        {
            // Do work
        }
    }
}

func loginButtonDidLogOut(loginButton: FBSDKLoginButton!) {
    println("User Logged Out")
}
Run Code Online (Sandbox Code Playgroud)

你只需复制这段代码就可以了!

更新为Swift 3

func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!) {
    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
        if result.grantedPermissions.contains("public_profile")
        {
            // Do work
        }
    }
}

func loginButtonDidLogOut(_ loginButton: FBSDKLoginButton!) {
    print("User Logged Out")
}
Run Code Online (Sandbox Code Playgroud)