2015-10-15 159 views
0

所以我創建了使用Parse和Swift的登錄/註冊功能。 Facebook成功登錄後,我想要看到的視圖控制器會短暫彈出,但SignIn視圖控制器會回到屏幕上。我希望用戶能夠登錄並可以訪問該應用程序。爲什麼是這樣?Facebook登錄塞格加載,然後返回登錄屏幕

下面是我的兩個視圖控制器的代碼。我有一個如下圖所示的segges設置故事板。

fbSignIn - 網友實拍在Segue公司

goSignIn - 簽到頁Segue公司

主視圖控制器(視圖控制器我想去的Facebook登錄後)

class MainViewController: UIViewController { 

override func viewDidAppear(animated: Bool) { 
    super.viewDidAppear(true) 

    if PFUser.currentUser() != nil { 

    } else { 

// take user to SignInViewController through a custom segue 
self.performSegueWithIdentifier("goSignIn", sender: self) 
} 

} 

@IBAction func logOutUser(sender: UIButton) { 

    PFUser.logOut() 
    self.performSegueWithIdentifier("goSignIn", sender: self) 

} 

登錄視圖控制器(登錄和Facebook登錄按鈕)

@IBAction func didTapFacebookConnect(sender: AnyObject) { 
    let permissions = [ "public_profile", "email", "user_friends" ] 

    PFFacebookUtils.logInInBackgroundWithReadPermissions(permissions) { 
     (user: PFUser?, error: NSError?) -> Void in 
     if let user = user { 
      if user.isNew { 

       print ("User signed up and logged in through Facebook!") 
       self.performSegueWithIdentifier("fbSignIn", sender: self) 


      } else { 
       print ("User logged in through Facebook!") 
       self.performSegueWithIdentifier("fbSignIn", sender: self) 
      } 
     } else { 
      print ("Uh oh. The user cancelled the Facebook login.") 
      self.performSegueWithIdentifier("fbSignIn", sender: self) 
     } 

回答

0

你順着接下去你的Facebook登錄頁面上在主視圖 - 控制一個viewDidAppear方法。您描述的行爲表明PFUser.currentUser()nil,所以self.performSegueWithIdentifier("goSignIn", sender: self)在您的主視圖控制器出現時在viewDidAppear中執行,並且您立即返回登錄頁面。

+0

我需要這個,所以當用戶打開應用程序時,它會檢查它們是否已登錄,如果不是,則會將它們發送到登錄頁面。有沒有什麼方法可以改變它,以便它不影響我的Facebook登錄? –

+0

就你所描述的行爲而言,就我看到的代碼而言,當你有一個Facebook登錄失敗時,可能會發生這種情況,這意味着'PFUser.currentUser()'爲零。即使您的登錄嘗試失敗,您也可以對主要的視圖控制器執行Segue,最終將您帶回登錄頁面。爲什麼不只是在用戶登錄失敗時顯示警報並保留在登錄視圖控制器中? –

+0

登錄成功時不會發生。當使用Facebook成功登錄後,主視圖控制器彈出,然後返回登錄視圖控制器。我希望它保持在主視圖控制器上。 –