Max*_*sen 2 uilabel ios nsurlsession swift
这是一个简单的测试应用程序,用于演示如何从Web提取数据.其中有一个NSURLSession由按钮动作触发.
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var city: UITextField!
@IBOutlet weak var message: UILabel!
@IBAction func buttonPressed(sender: AnyObject) {
var urlString = "http://www.weather-forecast.com/locations/" + city.text.stringByReplacingOccurrencesOfString(" ", withString: "") + "/forecasts/latest"
var url = NSURL(string: urlString)
let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {(data, response, error) in
var urlContent = (NSString(data: data, encoding: NSUTF8StringEncoding))
var contentArray = urlContent!.componentsSeparatedByString("<span class=\"phrase\">")
var newContentArray = contentArray[1].componentsSeparatedByString("</span>")
var messageContent = newContentArray[0] as String
println(messageContent)
self.message.text = messageContent
}
task.resume()
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
Run Code Online (Sandbox Code Playgroud)
问题是标签"message"不会改变为"messageContent"变量.当我println(messageContent)在控制台中完美地显示数据但GUI标签保持不变.
如果您放置self.message.text = "it worked"在NSURLSession之外,则标签会更改.
在我看来,问题发生在NSURLSession无法改变的地方label.text
有人可以帮忙吗?
NSURLSession的完成闭包在子线程中调用.更新UI应该在主线程中完成.
试试这个:
dispatch_async(dispatch_get_main_queue(), { () -> Void in
self.message.text = messageContent
})
Run Code Online (Sandbox Code Playgroud)