如何发布到服务器,等待响应,然后根据Swift中的响应更改视图?

时间:2016-04-18 19:36:31

标签: ios swift post nsurlsession

我正在尝试在打开应用时验证我的应用的用户。我有一个启动画面,用于将用户电子邮件的帖子发送到服务器,并根据服务器的响应,它将加载主视图或电子邮件验证页面。

我得到的问题是,当我发帖时它似乎把它放在它自己的单独线程上,直到视图已经改变并且应用程序已经解决之后我才看到响应。

我试过用:

NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue())

        let task = session.dataTaskWithRequest(request)
        {
         //more stuff to handle return 
        }
            task.resume()

以及

NSURLConnection.sendSynchronousRequest()

第一个和第三个选项的问题在于它们是不推荐使用的方法,除了它们在自己的线程上工作,并在if语句更改已经运行的视图之后接收响应。

这是所使用代码的片段:

        //returns the email of the user
        let email = self.fileCom.getUserStringField("email")


        //write the string to post to the server
        let post =  "email=" + email +
                    "&pass=" + self.serverCom.PASSWORD

        //post the user email to verification script and log result
        logResponse(self.serverCom.postToServer(self.serverCom.getVerifyEmailScriptURL(), bodyData: post))

        //Check the status of verified and email
       // if(self.fileCom.getUserBoolField("verified"))
        if(false)//temp
        {
            //change view to home view
            print("\nHomeView\n")
            showHomeView()
        }
        else
        {
            //change view to verification view
            print("\nVerifyView\n")
            showVerificationView()
        }

更改视图的if语句基于从服务器到文档文件夹中用户文件的存储响应。

1 个答案:

答案 0 :(得分:2)

NSURLSession是目前支持的方式。使用NSURLSession,您可以创建一个实现其委托方法的类来声明其委托,也可以使用块/闭包。 C / Obj-C中的“块”紧密映射到Swift中的“闭包”。它们允许您传递函数,就好像它们是变量一样。您可以使用NSURLSession的{​​{1}}来完成此操作。

当加载完成时,将在会话的委托队列中执行completionHandler块。从那里,你可以采取行动。

以下是使用它的快速示例(附带一些注释):

-dataTaskWithRequest:completionHandler: