我正在尝试在打开应用时验证我的应用的用户。我有一个启动画面,用于将用户电子邮件的帖子发送到服务器,并根据服务器的响应,它将加载主视图或电子邮件验证页面。
我得到的问题是,当我发帖时它似乎把它放在它自己的单独线程上,直到视图已经改变并且应用程序已经解决之后我才看到响应。
我试过用:
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语句基于从服务器到文档文件夹中用户文件的存储响应。
答案 0 :(得分:2)
NSURLSession
是目前支持的方式。使用NSURLSession
,您可以创建一个实现其委托方法的类来声明其委托,也可以使用块/闭包。 C / Obj-C中的“块”紧密映射到Swift中的“闭包”。它们允许您传递函数,就好像它们是变量一样。您可以使用NSURLSession
的{{1}}来完成此操作。
当加载完成时,将在会话的委托队列中执行completionHandler块。从那里,你可以采取行动。
以下是使用它的快速示例(附带一些注释):
-dataTaskWithRequest:completionHandler: