因此,我有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 ...),似乎无法识别它。
我尝试清理项目,删除派生数据,重新启动,但是仍然出现相同的错误:
类型'FBViewController'不符合协议 'FBSDKLoginButtonDelegate'
帮助表示赞赏! 谢谢
答案 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