我正在尝试通过GET
向dataTaskWithURL()
请求发送登录凭据,然后以字符串形式接收回复。如果回复为401 Unauthorized
,则我的函数attemptLogin()
应返回false
。否则,它将返回true
。
此时此工作正常,但只有一次loginButtonPressed(sender:AnyObject)被调用两次都会发生任何事情。为什么会这样?我尝试删除dispatch_async()
,因为我认为这可能会减慢速度,但这不是问题。这是我目前的代码:
//
// LoginViewController.swift
// Login App
//
// Created by James Allison on 30/11/2015.
// Copyright © 2015 James Allison. All rights reserved.
//
import UIKit
class LoginViewController: UIViewController {
@IBOutlet weak var usernameField: UITextField!
@IBOutlet weak var pinField: UITextField!
@IBAction func loginButtonPressed(sender: AnyObject) {
submitLogin()
}
var loginResponse:Bool = false
override func viewDidLoad() {
super.viewDidLoad()
}
func submitLogin() {
// first validate the fields
if usernameField.text! == "" || Int(pinField.text!) == 0 {
// empty
print("Fill in username & password.")
}
else {
if(attemptLogin(usernameField.text!, pin: pinField.text!)) {
print("YES!")
}
else {
print("NO!")
}
}
}
func attemptLogin(username: String, pin: String) -> Bool {
// construct url
let url = NSURL(string: "http://jamesallison.co/json.php?username=" + username + "&pin=" + pin)!
let task = NSURLSession.sharedSession().dataTaskWithURL(url, completionHandler: { (data, response, error) in
if let urlContent = data {
// convert to string
let dataString = NSString(data: urlContent, encoding: NSUTF8StringEncoding)
// check if 401 or not
dispatch_async(dispatch_get_main_queue(), { () -> Void in
if dataString == "401 Unauthorized\n" {
//print("incorrect login details")
self.loginResponse = false
}
else {
//print("correct login details!")
self.loginResponse = true
}
})
}
else {
// something failed
print("Error: invalid URL, no response or something.")
}
})
task.resume()
return self.loginResponse
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if (segue.identifier == "loginSuccess") {
// upcoming is set to FirstViewController (.swift)
//let upcoming: FirstViewController = segue.destinationViewController as! FirstViewController
}
}
}