這可能有點晦澀的問題,但我似乎無法弄清楚這裏發生了什麼。我有一個「登錄」功能,可以根據API檢查用戶名和密碼。由於某種原因,第一次調用該函數返回false,但是如果我第二次調用該函數,它將返回適當的true,假設我輸入了正確的憑證。我的功能總是在第一次返回false
下面是函數:
if testLogin(usernameTextField.text!, password: passwordTextField.text!) {
performSegueWithIdentifier("dismissLogin", sender: self)
} else {
let alert = UIAlertView()
alert.title = "Login Problem"
alert.message = "Wrong username or password."
alert.addButtonWithTitle("Dismiss")
alert.show()
}
}
的TESTLOGIN功能出現在這裏;
func testLogin(username: String, password: String) -> Bool {
let jsonString = "{\"username\":\"\(username)\",\"password\":\"\(password)\"}"
let myURL = "http://myurl.com/api/login.php"
let url:NSURL = NSURL(string: myURL)!
let session = NSURLSession.sharedSession()
let request = NSMutableURLRequest(URL: url)
request.HTTPMethod = "POST"
request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringCacheData
request.HTTPBody = jsonString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
let task = session.dataTaskWithRequest(request) {
(
let data, let response, let error) in
guard let _:NSData = data, let _:NSURLResponse = response where error == nil else {
print("error")
return
}
do {
let json:AnyObject? = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers)
if let result = json as? [String: AnyObject] {
if let status = result["Status"] as! Int? {
if status == 200 {
self.loginCheck = true
} else {
self.loginCheck = false
}
}
}
} catch {
print(error)
}
}
task.resume()
return loginCheck
}
對不起。然而,我似乎無法理解,爲什麼第一次調用testLogin返回false,但第二次調用它返回true。就好像這個函數沒有足夠快地調用這個網站並且返回false,但是我第二次調用這個函數時,它有時間去檢查這個網站了嗎?
「* dataTaskWithRequest的另一種變體是**異步** ...」*主題... –
感謝@MartinR。這不可避免地是** dataTaskWithRequest是異步**主題的副本,我只是沒有意識到它。 – ZbadhabitZ