【发布时间】:2015-09-13 08:34:42
【问题描述】:
我有一个非常奇怪的问题,我无法解决。 我正在使用 swift 开发一个 iOS 应用程序。在一个类(A 类)中,我调用另一个类(B 类)来连接服务器。此服务器返回一个 json,我将结果传递给 A 类,但我希望的操作出现了重要延迟。
这是A类的代码:
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()
}
所以在 A 类中起作用的函数是:
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:抱歉我的英语不好,我是意大利人
编辑:我认为服务器非常快,事实上就像我说的那样我得到了正确的结果(0 代表错误的邮件/密码,1 代表正确的邮件/密码)。我猜奇怪的行为是警报延迟
我按照 Sulthan 的建议编辑我的代码。像这样的代码还有另一个问题。事实上,我对警报没有问题(没有延迟)但没有其他功能是可能的(关闭不起作用)!!!
有什么想法吗?
【问题讨论】: