我使用这个代码在用户登录之后转变的视图控制器:错误时,编程转换视图控制器
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")
}
}
你在哪里调用该代码?你是在视图控制器出现时还是在之前调用它?我们需要更多的背景。 – JAL
我在用户将文本输入到两个文本字段后调用它,并按下“登录”按钮。这是你需要的吗?谢谢 –
是的,请发布登录按钮的完整操作。 – JAL