2015-10-15 8 views
0

У меня есть пользовательская кнопка, которую я использую для входа в Facebook, и она работала нормально до недавнего времени. Маркер доступа был кэширован, и в следующий раз, когда пользователь запустил приложение, на нем была отображена кнопка продолжения.iOS Facebook Access Token not caching

В последнее время отмеченная строка возвращает нуль независимо от того, был ли пользователь ранее зарегистрирован. Я не понимаю, почему - я не внес никаких изменений кода в эту часть приложения?

Иногда Войти потерпит неудачу со следующей ошибкой также:

Error Domain=com.facebook.sdk.login Code=308 "(null)" 

Вот мой код:

override func viewDidLoad() { 
    super.viewDidLoad() 
    if (FBSDKAccessToken.currentAccessToken() == nil){ // <<<< ALWAYS RETURNS NIL 
     self.continueButton.hidden = true 
    } else { 
     self.loginButton.hidden = true 
     self.notYouButton.hidden = false 
    } 
} 

@IBAction func loginPressed(sender: AnyObject) { 
    let permissions = ["user_about_me","user_relationships","user_birthday","user_location","user_status","user_posts", "user_photos"] 
    let login = FBSDKLoginManager() 
    login.logInWithReadPermissions(permissions, handler: { 
     (FBSDKLoginManagerLoginResult result, NSError error) -> Void in 
     if(error == nil){ 
     self.loginButton.hidden = true 
     self.continueButton.hidden = false 
     self.notYouButton.hidden = false 
     self.notYouButton.enabled = false 
     //self.performSelector("showBrowse", withObject: nil, afterDelay: 1.0) 
     } else { 
      print(error) 
     } 
    }) 
} 

EDIT: На дальнейших испытаний, кажется, что вызов FBSDKAccessToken.currentAccessToken() возвращает ноль если вызывается в viewDidLoad(), но если я назову его с помощью кнопки, то он вернет токен Facebook, как и ожидалось.

override func viewDidLoad() { 
    super.viewDidLoad() 
    if let token = FBSDKAccessToken.currentAccessToken() { 
     print (token) 
    } else { 
     print ("no token")      <<<<< RETURNS 
    } 
} 

@IBAction func buttonPressed(sender: AnyObject) { 
    if let token = FBSDKAccessToken.currentAccessToken() { 
     print (token)        <<<<< RETURNS 
    } else { 
     print ("no token") 
    } 
} 

ответ

0

Оказалось, что в моем приложении appDelegate возникла проблема, когда я настраивал пользовательский контроллер View. Я вернул код, чтобы использовать раскадровки, и проблема была решена, а не сама по себе резолюция для тех, у кого есть подобные проблемы, но для меня достаточно.