Итак, у меня есть класс 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
Добавление заглушек протокола добавляет только 1 функцию (loginButton ...), которая уже реализована, и кажется, что она ее не распознает.
![https://i.stack.imgur.com/O7EZ0.png](https://i.stack.imgur.com/Ku2O0.png)
Я пытался очистить проект, удалить производные данные, перезапустить, но все равно он выдает мне ту же ошибку:
Тип 'FBViewController' не соответствует протоколу
'FBSDKLoginButtonDelegate'
Помощь приветствуется!
Спасибо