2015-11-19 63 views
1


我使用這個代碼在用戶登錄之後轉變的視圖控制器:錯誤時,編程轉換視圖控制器

let controller = self.storyboard?.instantiateViewControllerWithIdentifier("messagesVC") as! messagesViewController 
self.presentViewController(controller, animated: true, completion: nil) 

的代碼,當我在編輯器中時,它不會引起任何錯誤,但運行什麼也沒有發生,我隨此錯誤返回:

2015-11-19 12:06:08.835 collaboration[8788:70890] Warning: Attempt to present on which is already presenting

視圖控制器「messagesViewController」存在,它的故事板場景都有標識「messagesVC」。我被困在什麼是錯誤的...如果你知道請幫助我。
感謝

登錄按鈕:

@IBAction func loginButton(sender: UIButton) { 
     let savedUsername = NSUserDefaults.standardUserDefaults().stringForKey("username")! as String 
     if savedUsername == "" { 
     if usernameInput.text != "" && passwordInput.text != "" { 
      let usernameTextFieldString = usernameInput.text! as String 
      let passwordTextFieldString = passwordInput.text! as String 
      let myUrl = NSURL(string: "http://127.0.0.1/bubble/login.php?username=\(usernameTextFieldString)&password=\(passwordTextFieldString)&secretKey=kjdfb4u7bksSDDF44wlksdnw33j4") 
      let request = NSMutableURLRequest(URL: myUrl!) 
      request.HTTPMethod = "POST" 
      let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { 
       data, response, error in 
       dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)) { 
        let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding) 
        if error != nil { 
         print("Error: \(error)") 
        } 
        dispatch_async(dispatch_get_main_queue()) { 
         let userInfo = responseString!.componentsSeparatedByString("9254203598") 
         let userInfoCount = userInfo.count 
         if userInfoCount == 4 { 
          let userInfoId = userInfo[1] as String 
          let userInfoUsername = userInfo[2] as String 
          let userInfoPassword = userInfo[3] as String 
          NSUserDefaults.standardUserDefaults().setObject(userInfoId, forKey: "id") 
          NSUserDefaults.standardUserDefaults().setObject(userInfoUsername, forKey: "username") 
          NSUserDefaults.standardUserDefaults().setObject(userInfoPassword, forKey: "password") 
          NSUserDefaults.standardUserDefaults().synchronize() 
          let keyId = NSUserDefaults.standardUserDefaults().stringForKey("id") 
          let keyUsername = NSUserDefaults.standardUserDefaults().stringForKey("username") 
          let keyPassword = NSUserDefaults.standardUserDefaults().stringForKey("password") 
          if keyId != nil && keyUsername != nil && keyPassword != nil { 
           self.sendAlert("Success", message: "You have been logged in successfully") 
           self.usernameInput.text = "" 
           self.passwordInput.text = "" 
           self.loginStatus() 
        //VIEW CONTROLLER TRANSITION TO FIX 
           let controller = self.storyboard?.instantiateViewControllerWithIdentifier("messagesVC") as! messagesViewController 
           self.presentViewController(controller, animated: true, completion: nil) 
          } 
         } else { 
          self.sendAlert("Error", message: "Unable to login") 
         } 
        } 
       } 
      } 
      task.resume() 
      loginStatus() 
     } else { 
      sendAlert("Login Invalid", message: "The username and password you entered are not associated with an account") 
     } 
     } else { 
      self.sendAlert("Error", message: "You must be logged in to log out") 
     } 
    } 

修改後的代碼:

@IBAction func loginButton(sender: UIButton) { 
     let savedUsername = NSUserDefaults.standardUserDefaults().stringForKey("username")! as String 
     if savedUsername == "" { 
     if usernameInput.text != "" && passwordInput.text != "" { 
      let usernameTextFieldString = usernameInput.text! as String 
      let passwordTextFieldString = passwordInput.text! as String 
      let myUrl = NSURL(string: "http://127.0.0.1/bubble/login.php?username=\(usernameTextFieldString)&password=\(passwordTextFieldString)&secretKey=kjdfb4u7bksSDDF44wlksdnw33j4") 
      let request = NSMutableURLRequest(URL: myUrl!) 
      request.HTTPMethod = "POST" 
      let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { 
       data, response, error in 
       dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)) { 
        let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding) 
        if error != nil { 
         print("Error: \(error)") 
        } 
        dispatch_async(dispatch_get_main_queue()) { 
         print(responseString) 
         let userInfo = responseString!.componentsSeparatedByString("9254203598") 
         let userInfoCount = userInfo.count 
         if userInfoCount == 4 { 
          let userInfoId = userInfo[1] as String 
          let userInfoUsername = userInfo[2] as String 
          let userInfoPassword = userInfo[3] as String 
          NSUserDefaults.standardUserDefaults().setObject(userInfoId, forKey: "id") 
          NSUserDefaults.standardUserDefaults().setObject(userInfoUsername, forKey: "username") 
          NSUserDefaults.standardUserDefaults().setObject(userInfoPassword, forKey: "password") 
          NSUserDefaults.standardUserDefaults().synchronize() 
          let keyId = NSUserDefaults.standardUserDefaults().stringForKey("id") 
          let keyUsername = NSUserDefaults.standardUserDefaults().stringForKey("username") 
          let keyPassword = NSUserDefaults.standardUserDefaults().stringForKey("password") 
          if keyId != nil && keyUsername != nil && keyPassword != nil { 
           self.sendAlert("Success", message: "You have been logged in successfully") 
           self.usernameInput.text = "" 
           self.passwordInput.text = "" 
           NSUserDefaults.standardUserDefaults().stringForKey("username") 
           //self.loginStatus() 
           //VIEW CONTROLLER TRANSITION TO FIX 
           let controller = self.storyboard?.instantiateViewControllerWithIdentifier("messagesVC") as! messagesViewController 
           self.presentViewController(controller, animated: true, completion: nil) 
          } 
         } else { 
          print("Unable to login") 
          //self.sendAlert("Error", message: "Unable to login") 
         } 
        } 
       } 
      } 
      task.resume() 
      //loginStatus() 
     } else { 
      //sendAlert("Login Invalid", message: "The username and password you entered are not associated with an account") 
     } 
     } else { 
      //sendAlert("Error", message: "You must be logged in to log out") 
     } 
    } 
+0

你在哪裏調用該代碼?你是在視圖控制器出現時還是在之前調用它?我們需要更多的背景。 – JAL

+0

我在用戶將文本輸入到兩個文本字段後調用它,並按下「登錄」按鈕。這是你需要的嗎?謝謝 –

+0

是的,請發佈登錄按鈕的完整操作。 – JAL

回答

0

我看到兩件事情可能是罪魁禍首:

你打電話self.sendAlert,我以爲禮物在出示您的messagesVC控制器之前,在當前視圖控制器上顯示UIAlertController。這是在主線程中發生的串行事件,並且看起來您正在呈現警報時呈現消息控制器。爲什麼不等待在消息視圖控制器加載之後才顯示警報,或者在警報控制器上將視圖控制器顯示爲UIAlertAction

其次,您正在調用函數self.loginStatus()。如果您在該功能中顯示警報或任何其他視圖控制器,那也可能是您的問題。

+0

登錄狀態會更改當前視圖控制器上的標籤。我必須刪除此函數與視圖控制器的交互並刪除self.sendAlert()?感謝一羣人 –

+0

我會刪除'sendAlert()',看看是否有幫助。 – JAL

+0

@NickPitoniak有幫助嗎? – JAL