gpt4 book ai didi

ios - Swift xcode 6 label.text 在 NSURLSession 中没有改变

转载 作者:可可西里 更新时间:2023-11-01 00:17:30 25 4
gpt4 key购买 nike

这是一个简单的测试应用程序,用于演示如何从网络中提取数据。其中有一个由按钮操作触发的 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.
}
}

问题是标签“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
})

关于ios - Swift xcode 6 label.text 在 NSURLSession 中没有改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27433309/

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