2015-11-19 65 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