符合协议-一次又一次添加协议存根不能解决错误

时间:2018-11-05 15:00:47

标签: swift xcode facebook-ios-sdk xcode10 turbolinks-ios

因此,我有FBViewController类,该类应显示一个按钮,用于登录和注销(仅用于测试FB登录)。我将此整合到新创建的项目中,并且一切正常。然后,我将其重新设计到了我的应用中,但无法正常工作。不知道它是否与快速版本或其他有关... 使用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

添加协议存根只会添加一个已经实现的功能(loginButton ...),似乎无法识别它。

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

我尝试清理项目,删除派生数据,重新启动,但是仍然出现相同的错误:

  

类型'FBViewController'不符合协议   'FBSDKLoginButtonDelegate'

帮助表示赞赏! 谢谢

3 个答案:

答案 0 :(得分:3)

因此,经过大量搜索,我找到了解决该问题的答案,here

我已经导入了具有自己的Error结构的Turbolinks-ios,我不得不在方法stub中使用Swift.Error-

 func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Swift.Error!) {...

答案 1 :(得分:1)

对于其他可能来这里的Cocoapod的班级代表有问题的人。

所以我要添加协议的问题

$res = new \stdClass

但是他们总是要重复一次,因为cocoapod项目和我的项目具有相同的类名“ StepEnum”来解决,我只需要更改我的类名即可解决。

答案 2 :(得分:0)

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

从.podfile中删除所有依赖项(或仅通过在行首添加#进行注释) 在您的项目目录上运行pod install,然后等待卸载所有已删除的Pod 重新添加pod依赖项,然后再次运行pod install 再次清理您的项目并重新构建


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

例如,开始键入方法,在自动完成列表上选择右侧(如果未显示,请使用^+Space),然后按Enter: sample