Swift代码中非常奇怪的问题.延迟进行操作 [英] Very strange issue in Swift code. Delay to make operations

查看:95
本文介绍了Swift代码中非常奇怪的问题.延迟进行操作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个无法解决的非常奇怪的问题. 我正在使用Swift开发iOS应用.在一个类(A类)中,我称为另一个类(B类)以连接到服务器.该服务器返回一个json,我将结果传递给A类,但是我希望执行的操作遇到了重要的延迟.

I've a very strange issue I could't solve. I'm developing an iOS app using swift. In a class (class A), I call another class (class B) for connecting to a server. This server return a json, I pass the result to class A but I get an important delay for the operation I wish.

这是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中处理结果的函数是:

so the func that works the result in class A is:

 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秒钟后显示警报!!! 关于原因以及如何解决的任何想法?

It's strange because console prints "Success..." or "Error..." very quickly but app shows alert after about 10 seconds!!! Any idea about the reason and how I could solve???

PS:对不起,我的英语不好,我是意大利语

PS: sorry for my bad english, I'm italian

我认为服务器运行速度非常快,实际上就像我说的那样,我得到了正确的结果(0表示错误的邮件/密码,1表示正确的邮件/密码).我猜这是奇怪的行为,是警报的延迟

I think server is very fast, in fact like I said I've the right result (0 for wrong mail/password, 1 for right mail/password). the strange behavior, I guess, is the delay for alert

我按照Sulthan的建议编辑代码.像这样的代码还有另一个问题.实际上,我对警报没有任何问题(没有延迟),但是没有其他功能可以(关闭不起作用)!

I edit my code like Sulthan suggested. There's another issue with code like that. In fact, I get no problem with alert (no delay) but no other function is possible (dismiss isn't working)!!!

有什么主意吗?

推荐答案

您正在从后台线程更新ui.您只需要从主线程更新UI.

You are updating ui on from background thread. You have to update UI from main thread only.

dispatch_async(dispatch_get_main_queue(), {

  loginWithMailScreen().loginUser_result(success_login)

})

这篇关于Swift代码中非常奇怪的问题.延迟进行操作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆