gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 12:50:27 25 4
gpt4 key购买 nike

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

我遇到的问题是,当我发布帖子时,它似乎将其放在自己单独的线程中,并且在 View 已经更改且应用程序已解决之前我看不到响应。

我尝试过使用:

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

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

还有

NSURLConnection.sendSynchronousRequest()

第一个和第三个选项的问题在于它们是不推荐使用的方法,除了它们在自己的线程上工作,并且在更改 View 的 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()
}

更改 View 的 if 语句基于服务器对文档文件夹中用户文件的存储响应。

最佳答案

NSURLSession 是当前支持的访问方式。使用 NSURLSession,您可以创建一个实现其委托(delegate)方法的类来声明为其委托(delegate),或者您可以使用 block /闭包。 C/Obj-C 中的“ block ”与 Swift 中的“闭包”紧密对应。它们允许您像传递变量一样传递函数。您可以使用 NSURLSession-dataTaskWithRequest:completionHandler: 来完成此操作。

completionHandler block 将在加载完成时执行(在 session 的委托(delegate)队列中)。从那里,您可以根据响应采取行动。

这是一个使用它的简单示例(带有一些注释):

let task = NSURLSession.sharedSession().dataTaskWithRequest(request, completionHandler: {
// Don't put other code before this next line, it is defining the closure we just started with the "{"
(data, response, error) -> Void in
// This is where the closure body begins
print(NSThread.isMainThread()) // false (unless you've set the delegate queue to be the main queue)

// Example of processing the return value
let dataString = NSString.init(data: data!, encoding: NSUTF8StringEncoding)
print(dataString) // Okay to do work with this here, but don't do any UI work.

// Jump back over to the main queue to do any UI updates
// UI updates must always be done on the main queue
dispatch_async(dispatch_get_main_queue(), {
print(NSThread.isMainThread()) // true (we told it to execute this new block on the main queue)
// Execute the code to update your UI (change your view) from here
myCoolUIUpdatingMethod(dataString)
});

// anything down here could be executed before the dispatch_async block completes
// dispatch_sync would block this thread until its block completes
});

// run the task
task.resume()

// your program's main thread will not be blocked while the load is in progress

关于ios - 如何发布到服务器,等待响应,然后根据 Swift 中的响应更改 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36702866/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com