2

所以我有一个 FBViewController 类,它应该显示一个按钮让我登录和注销(只是为了测试 FB 登录)。我将它集成到新创建的项目中并且一切正常。然后我将它重新设计到我的应用程序中,但它不起作用。不确定它是否与 swift 版本或其他...使用 Xcode 10.0

import UIKit
import FBSDKLoginKit

class FBViewController: UIViewController, FBSDKLoginButtonDelegate {


    override func viewDidLoad() {
        super.viewDidLoad()
        let btnFBLogin = FBSDKLoginButton()
        btnFBLogin.readPermissions = ["public_profile", "email"]
        btnFBLogin.delegate = self
        btnFBLogin.center = self.view.center
        self.view.addSubview(btnFBLogin)

        if FBSDKAccessToken.current() != nil{
            print("Logged IN ALREADY")
            printInfo()
        }else{
            print("not logged in")
        }

    }

    func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!) {
        if error != nil{
            print(" error")
      //      print(error.localizedDescription)
        }else if result.isCancelled {
            print("User cancelled.")
        }
        else {
            print("Logge IN!")
            printInfo()
        }
    }

    func loginButtonDidLogOut(_ loginButton: FBSDKLoginButton!) {
        print("logged out")
    }

    func printInfo(){


        if(FBSDKAccessToken.current() != nil){

            FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id,name , first_name, last_name , email"]).start(completionHandler: { (connection, result, error) in

                guard let Info = result as? [String: Any] else { return }

                if let userName = Info["name"] as? String
                {
                    print(userName)
                }

            })
        }
    }

}

FBSDKLoginButtonDelegate

/**
 @protocol
  A delegate for `FBSDKLoginButton`
 */
@protocol FBSDKLoginButtonDelegate <NSObject>

@required
/**
  Sent to the delegate when the button was used to login.
 @param loginButton the sender
 @param result The results of the login
 @param error The error (if any) from the login
 */
- (void)loginButton:(FBSDKLoginButton *)loginButton
didCompleteWithResult:(FBSDKLoginManagerLoginResult *)result
                error:(NSError *)error;

/**
  Sent to the delegate when the button was used to logout.
 @param loginButton The button that was clicked.
*/
- (void)loginButtonDidLogOut:(FBSDKLoginButton *)loginButton;

@optional
/**
  Sent to the delegate when the button is about to login.
 @param loginButton the sender
 @return YES if the login should be allowed to proceed, NO otherwise
 */
- (BOOL) loginButtonWillLogin:(FBSDKLoginButton *)loginButton;

@end

添加协议存根仅添加 1 个已实现的功能 (loginButton...),但似乎无法识别。

https://i.stack.imgur.com/O7EZ0.png

我尝试清理项目,删除派生数据,重新启动,但它仍然给我同样的错误:

类型“FBViewController”不符合协议“FBSDKLoginButtonDelegate”

帮助表示赞赏!谢谢

4

3 回答 3

5

因此,经过大量搜索后,我找到了此处描述的此问题的答案

我已经导入了具有自己的错误结构的 Turbolinks-ios,我必须在方法存根中使用 Swift.Error -

 func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Swift.Error!) {...
于 2018-11-05T20:30:56.730 回答
1

对于其他可能来到这里遇到来自 Cocoapod 的类代表问题的人。

所以我遇到的问题是添加协议

func photo(captured: UIImage?, currentStep: StepEnum) {

但他们总是要求重复,因为 cocoapod 项目和我的项目具有相同的类名“StepEnum”来修复我只需要更改我的类名并且它已解决。

于 2020-01-17T09:44:52.083 回答
0

尝试执行以下步骤卸载并重新安装 pod:

从您的 .podfile 中删除所有依赖项(或者只需在行首添加注释#pod install在您的项目目录上运行并等待卸载所有已删除的 pod 重新添加 pod 依赖项并pod install再次运行 清理您的项目并再次构建


另外:有时我会遇到类似的问题,只需删除已经实现的所需功能,然后尝试使用 Xcode 的自动完成功能重新添加即可。

例如,开始输入方法,在自动完成列表上选择右边(如果没有出现使用^+Space),然后按回车: 示例

于 2018-11-05T16:57:55.430 回答