2015-08-05 2 views
1

Я в настоящее время разрабатываю приложение для iOS, которое позволяет войти в систему через Facebook/Parse. Входной поток выглядит следующим образом:PFUser currentUser возвращает nil после Facebook Вход с Parse SDK

  • кнопка входа в систему коснулась и открывается окно входа в систему Facebook;

  • пользователь регистрируется и дает разрешение на Facebook;

  • приложение извлекает информацию о пользователе в Facebook;

  • приложение выполняет [PFFacebookUtils logInInBackGroundWithAccessToken: (accessToken)^block {}] для аутентификации входа в Parse;

  • приложение переходит к представлению и пытается выполнить запрос для извлечения данных, связанных с этим пользователем из Parse.

Проблема заключается в том: после того, как logInInBackgroundWithAccessToken выполняется, [PFUser CurrentUser] возвращает ноль, и я получаю «Не удается сделать запрос сравнения для типа: (нулевой)» ошибка.

ответ

1

Хорошо! Решила!

После копания в коде немного дальше, я понял, что

[PFFacebookUtils logInInBackgroundWithAccessToken:(accessToken) block:^(nullable__block){}]; 

обратного вызова не выполняется по неизвестным причинам.

Чтобы решить эту проблему, я добавил проверку в методе -viewDidLoad, чтобы увидеть, существует ли действительный [FBSDKAccessToken currentAccessToken], но НЕ действительный [PFUser currentUser], и если это так, я заставил метод быть выполненным.

Если вам нужно более подробное объяснение, не стесняйтесь оставить свой комментарий! Благодаря!

0
if ((currentUser != nil)) { 

     if (PFFacebookUtils.isLinkedWithUser(currentUser!)) { 
      proccessCurrent(currentUser!) 

     } else { 
      PFFacebookUtils.linkUserInBackground(currentUser!, withReadPermissions: self.facebookReadPermissions, block: {(success, error) in 
       if (success) { 
        self.proccessCurrent(currentUser!) 

       } else { 
        self.presentWalkThroughViewController() 
       } 
      }) 


     } 
    } else { 
     //var currentToken: FBSDKAccessToken = FBSDKAccessToken.currentAccessToken() 

     if (FBSDKAccessToken.currentAccessToken() == nil) { 
      self.presentWalkThroughViewController() 

     } else { 
      var currentToken: FBSDKAccessToken = FBSDKAccessToken.currentAccessToken() 
       PFFacebookUtils.logInInBackgroundWithAccessToken(currentToken, block: {(user, error) in 
       if (error == nil) { 
        user?.pinInBackgroundWithBlock({(success, error) in 
         if (success) { 
          self.proccessCurrent(user!) 
         } else { 
          self.presentWalkThroughViewController() 
         } 

        }) 
       } else { 
        self.presentWalkThroughViewController() 
       } 
      }) 
     } 
    } 

Методы processCurrentUser, продолжают обрабатывать мое выполнение программы и presentWalkThroughViewController представлены экраны входа в систему. Это безопасный способ справиться с пропуском экрана входа на facebook, как только пользователь уже зарегистрировался?

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