gpt4 book ai didi

ios - viewLoad 上的 Swift JSON 解析执行

转载 作者:行者123 更新时间:2023-11-30 14:12:55 25 4
gpt4 key购买 nike

我目前正在努力解决我的 viewController 上的一个小问题。我已经存储了用户信息来保存用户的登录状态,无论如何,当用户打开应用程序时,他们会显示“个人资料”页面。我试图(在本例中返回电子邮件)在应用程序打开时返回与该用户相关的值,但不知道如何在 Controller 本身上执行代码,我的 JSON 发布在下面并返回正确的所需信息。但是,我的标签仍然无法获取用户打开应用程序时存储的电子邮件的值。标签保持空白!

    let myUrl = NSURL(string: "http://www.mywebsite.co.za/php/scripts/getuserEmail.php");
let request = NSMutableURLRequest(URL:myUrl!);
request.HTTPMethod = "POST";
let postString = "user_id=\(userId)";
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding);
let task = NSURLSession.sharedSession().dataTaskWithRequest(request)
{
data, response, error in
println(" response = \(response)")
let responseString = NSString(data: data, encoding: NSUTF8StringEncoding)
println("response data = \(responseString)")
var err: NSError?
var json = NSJSONSerialization.JSONObjectWithData(data, options: .MutableContainers, error: &err) as? NSDictionary
if let parseJSON = json
{
var userEmail = parseJSON["userEmail"] as? String
self.usersEmail.text = userEmail
}
}

基本上希望代码在该 View 打开时执行和更新我的标签,因为用户已经能够从另一个 View Controller 更改电子邮件,因此电子邮件应该相应更新。我们很乐意提供任何其他信息。

添加:在 myUrl 变量分配之后,控制台的 println 将不会执行。下面的回复仍然不起作用,但这是我在 viewWillAppear 上的完整代码:

 override func viewWillAppear(animated: Bool) {
super.viewDidAppear(animated)

let userFirstName = NSUserDefaults.standardUserDefaults().stringForKey("userFirstName")
let userLastName = NSUserDefaults.standardUserDefaults().stringForKey("userLastName")
var userFullName = userFirstName!

userFullNameLabel.text = userFullName

let userId:String? = NSUserDefaults.standardUserDefaults().stringForKey("userId")
let imageUrl = NSURL(string:"http://www.mywebsite.co.za/profile-pictures/\(userId!)/user-profile.jpg")


dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
let imageData = NSData(contentsOfURL: imageUrl!)

if(imageData != nil )
{
dispatch_async(dispatch_get_main_queue(),{
self.profilePictureImageVIew.image = UIImage(data: imageData!)
self.profilePictureImageVIew.backgroundColor = UIColor.clearColor()
})
}
}


// Send HTTP POST
let myUrl = NSURL(string: "http://www.mywebsite.co.za/php/scripts/getuserEmail.php");
let request = NSMutableURLRequest(URL:myUrl!);
request.HTTPMethod = "POST";
let postString = "user_id=\(userId)";
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding);
let task = NSURLSession.sharedSession().dataTaskWithRequest(request)
{
data, response, error in
// You can print out response object
println("******* response = \(response)")
// Print out reponse body
let responseString = NSString(data: data, encoding: NSUTF8StringEncoding)
println("****** response data = \(responseString)")
var err: NSError?
var json = NSJSONSerialization.JSONObjectWithData(data, options: .MutableContainers, error: &err) as? NSDictionary
if let parseJSON = json
{
var userEmail = parseJSON["userEmail"] as? String
self.usersEmail.text = userEmail
}
}
}

最佳答案

如果我理解正确,您的意思是页面已显示,但您对网络的调用尚未完成并分配给 self.usersEmail.text 。我在项目中所做的就是在主队列上异步分派(dispatch)像您这样的 block 中的命令。尝试在 if 语句中执行此操作:

dispatch_async(dispatch_get_main_queue()) {
var userEmail = parseJSON["userEmail"] as? String
self.usersEmail.text = userEmail
}

希望这有帮助。这可能不合适,但希望有人可以告诉我是否合适。到目前为止,它对我有用。

您还需要在其 block 之后恢复任务:

    let myUrl = NSURL(string: "http://www.mywebsite.co.za/php/scripts/getuserEmail.php");
let request = NSMutableURLRequest(URL:myUrl!);
request.HTTPMethod = "POST";
let postString = "user_id=\(userId)";
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding);
let task = NSURLSession.sharedSession().dataTaskWithRequest(request)
{
data, response, error in
// You can print out response object
println("******* response = \(response)")
// Print out reponse body
let responseString = NSString(data: data, encoding: NSUTF8StringEncoding)
println("****** response data = \(responseString)")
var err: NSError?
var json = NSJSONSerialization.JSONObjectWithData(data, options: .MutableContainers, error: &err) as? NSDictionary
if let parseJSON = json
{
var userEmail = parseJSON["userEmail"] as? String
self.usersEmail.text = userEmail
}
}
task.resume()

关于ios - viewLoad 上的 Swift JSON 解析执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31551462/

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