У меня очень странная проблема, которую я не мог решить. Я разрабатываю приложение iOS с помощью быстрого доступа. В классе (класс A) я вызываю другой класс (класс B) для подключения к серверу. Этот сервер возвращает json, я передаю результат классу A, но получаю важную задержку для операции, которую я хочу.Очень странная проблема в коде Swift. Задержка для совершения операций
Вот код класса А:
func loginUser() {
//check for data
if txt_mail!.text == "" || txt_password!.text == ""{
var alertView = UIAlertView(title: "Error", message: "no data", delegate: nil, cancelButtonTitle: "OK")
alertView.show()
}
else
{
//save data and login
var data:NSMutableDictionary = NSMutableDictionary(objects: [txt_mail!.text, txt_password!.text], forKeys: ["email", "password"])
loginUserClass().loginUser(data)
}
}
в классе B я есть:
func loginUser (data:NSMutableDictionary) {
var success_login:Int = 0
userData = data
//request for login
var request = NSMutableURLRequest(URL: NSURL(string: "http://link_to_server")!)
var session = NSURLSession.sharedSession()
request.HTTPMethod = "POST"
let email:String = userData.valueForKey("email") as! String
let password:String = userData.valueForKey("password") as! String
let auth:NSMutableDictionary = ["email":email,"token":password]
var err: NSError?
request.HTTPBody = NSJSONSerialization.dataWithJSONObject(params, options: nil, error: &err)
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")
var task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in
var err: NSError?
var json_return_server = NSJSONSerialization.JSONObjectWithData(data, options: .MutableLeaves, error: &err) as? NSDictionary
if(err != nil) {
//error
success_login = 0
}
else {
success_login = 1
}
}
/*
Now I call another func in class A for "working" the result
*/
dispatch_async(dispatch_get_main_queue(), {
loginWithMailScreen().LoginUser_result(success_login)
})
})
task.resume()
}
так FUNC, что работает результат в классе А:
func LoginUser_result (success:Int) {
if success == 1{
print("Success...")
let alert = UIAlertView(title: "Good", message: "Success...", delegate: nil, cancelButtonTitle: "Ok")
alert.show()
}
else if success == 0{
print("Error...")
let alert = UIAlertView(title: "Error", message: "I'm sorry", delegate: nil, cancelButtonTitle: "Ok")
alert.show()
}
}
Странно, потому что консоль печатает «Успех ...» или «Ошибка ...» очень быстро, но приложение показывает предупреждение через 10 секунд !!! Любая идея о причине и о том, как я мог бы решить ???
PS: извините за мой плохой английский, я итальянский
EDIT: Я думаю, что сервер очень быстро, на самом деле, как я сказал, что я имею правильный результат (0 для неправильного почты/пароль, 1 для правая почта/пароль). странное поведение, я думаю, это задержка для предупреждения
Я редактирую свой код, как предложил Султан. Есть еще одна проблема с подобным кодом. На самом деле, у меня нет проблем с предупреждением (без задержки), но никакая другая функция не возможна (увольнение не работает) !!!
Любая идея?
Связанные в Obj-C http://stackoverflow.com/questions/11386403/delay-when-updating-view-in-the-completionhandler-of-an-async-http-request – Sulthan