Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json Swift代码中有一个非常奇怪的问题。延误作业_Json_Swift_Delay - Fatal编程技术网

Json Swift代码中有一个非常奇怪的问题。延误作业

Json Swift代码中有一个非常奇怪的问题。延误作业,json,swift,delay,Json,Swift,Delay,我有一个很奇怪的问题,我无法解决。 我正在用swift开发一个iOS应用程序。在一个类(类a)中,我调用另一个类(类B)来连接到服务器。这个服务器返回一个json,我将结果传递给类a,但是我得到了一个我希望的操作的重要延迟 这是A类的代码: func loginUser () { //check for data if txt_mail!.text == "" || txt_password!.text == ""{ var alertView = U

我有一个很奇怪的问题,我无法解决。 我正在用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是:

 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秒后显示警报!!! 你知道原因和我如何解决吗

对不起,我英语不好,我是意大利人

编辑:我认为服务器速度非常快,事实上就像我说的,我得到了正确的结果(0代表错误的邮件/密码,1代表正确的邮件/密码)。我猜,奇怪的行为是警报延迟

我按照Sulthan的建议编辑代码。这样的代码还有一个问题。事实上,我对警报(无延迟)没有问题,但没有其他功能是可能的(Disclease不工作)


有什么想法吗

您正在从后台线程更新ui。您必须仅从主线程更新UI

dispatch_async(dispatch_get_main_queue(), {

  loginWithMailScreen().loginUser_result(success_login)

})

回答得很好。但如果我想显示警报,它就可以工作。如果我想关闭视图控制器,它不起作用(我使用If success==1{self.dismissViewControllerAnimated(true,completion:nil)}@user1106897它每次都能解决这种问题