- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在努力解决我的 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/
我目前正在努力解决我的 viewController 上的一个小问题。我已经存储了用户信息来保存用户的登录状态,无论如何,当用户打开应用程序时,他们会显示“个人资料”页面。我试图(在本例中返回电子邮件
我不知道在什么位置设置 NavigationBar 的 tintColor 或我的 ViewController 的标题是正确的。它也适用于 -init 方法和 -viewLoad 方法。执行此操作的
我是一名优秀的程序员,十分优秀!