2015-04-30 3 views
1

Я новичок в iOS и Swift, поэтому простите мое невежество по этому вопросу.IOS - кнопка входа в Facebook: непризнанная ошибка выбора

Я пытаюсь добавить кнопку входа в систему Facebook на мою Main.storyboard. Я добавил объект вида и задал класс представления FBSDKLoginButton. Однако, когда я запускаю проект в симуляторе, он выходит из строя с непризнанной ошибкой селектора.

В соответствии с этим, https://developers.facebook.com/docs/ios/troubleshooting#unrecognizedselector, мне нужно добавить [FBSDKLoginButton class]; в свой делегат приложения или добавить флаг -ObjC-линкера.

Вопрос в том, что является эквивалентом этого кода в Swift? Или я должен добавить флаг -ObjC-линкера? Какой из них предпочтительнее?

ответ

3

Вот реализация которых я использую


  override func viewDidLoad() { 
       super.viewDidLoad() 
       // Do any additional setup after loading the view, typically from a nib. 

       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") 
} 



    func returnUserData() 
     { 
      let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: nil) 
      graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in 

       if ((error) != nil) 
       { 
        // Process error 
        println("Error: \(error)") 
       } 
       else 
       { 
        println("fetched user: \(result)") 
        let userName : NSString = result.valueForKey("name") as! NSString 
        println("User Name is: \(userName)") 
        let userEmail : NSString = result.valueForKey("email") as! NSString 
        println("User Email is: \(userEmail)") 
       } 
      }) 
     } 

ПЕРЕДАННЫЕ Link

+0

Это сработало для меня. Тем не менее, мне все еще интересно, почему добавление кнопки непосредственно в раскадровку и попытка ее использования вызвали эту ошибку без '[FBSDKLoginButton class];' добавлено в делегат приложения. – Pattay

4

я получил точно такую ​​же ошибку.

После осмотра мне кажется, что мне нужно в моем проекте: FBSDKCoreKit, FBSDKLoginKit и FBSDKShareKit.

Если вы используете cocoapods, это линия в Podfile:

pod 'FBSDKCoreKit' 
pod 'FBSDKLoginKit' 
pod 'FBSDKShareKit' 

после pod install, добавьте в ваш мостиковых заголовок .h файла:

#import <FBSDKCoreKit/FBSDKCoreKit.h> 
#import <FBSDKShareKit/FBSDKShareKit.h> 
#import <FBSDKLoginKit/FBSDKLoginKit.h> 

В раскадровку, определить вид с классом типа FBSDKLoginButton:

enter image description here

+0

Поскольку вы используете контейнеры, вам не нужно #import в заголовке моста, он избыточен. просто используйте соответствующие импорты «FBSDKCoreKit» в верхней части файлов –

Смежные вопросы