![](/img/trans.png)
[英]Trigger button to change text in UITextView in swift3 xcode 8 ios 10
[英]Why My UILabel Text don't change in Swift3 with Xcode 8.1
我需要每20秒更新一次UILabel
文本。 此处一切正常,但我的UILabel
不变。
数据也从URL和短语中正确加载。 当我在viewDidLoad
尝试self.team1Score = "1"
,它可以工作。
请查看我的代码,并向我建议如何每20秒更改一次UILabel
文本。
import UIKit
class WatchLiveVideo: UIViewController {
@IBOutlet var team1Score: UILabel!
@IBOutlet var team2Score: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
self.getScore()
//run getScore in every 20 Seconds
_ = Timer.scheduledTimer(timeInterval: 20, target: self, selector: #selector(WatchLiveVideo.self.getScore), userInfo: nil, repeats: true)
}
func getScore()
{
let myUrl = URL(string: "http://myurl.com");
var request = URLRequest(url:myUrl!)
request.httpMethod = "POST"// Compose a query string
//input data bind to send server
let streamID = getStreamID
let postString = "streamID=\(streamID)"
request.httpBody = postString.data(using: String.Encoding.utf8)
let task = URLSession.shared.dataTask(with: request) { (data: Data?, response: URLResponse?, error: Error?) in
if error != nil
{
print("error=\(error)")
return
}
do {
let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary
if let parseJSON = json {
let status = parseJSON["status"] as? String
let team1 = parseJSON["team1"] as? String
let team2 = parseJSON["team2"] as? String
if(status == "1")
{
self.team1Score.text = team1
self.team2Score.text = team2
}
else if(status == "0")
{
print("No Score Found")
}
}
} catch {
print(error.localizedDescription)
}
}
task.resume()
}
}
您需要在主线程中进行UI更新。 因此,请尝试按以下方式包装标签更新代码,以使其在主线程中运行:
DispatchQueue.main.async {
self.team1Score.text = team1
self.team2Score.text = team2
}
我刚刚添加了一个演示项目,以向您说明我提供的答案有效。 我只是举了一个例子,看起来非常像您提供的代码。 正如我上面提到的,我每20秒就远程拨打一次公共休息服务,并更新了主队列中的标签。 您可以下载并运行该应用程序以查看其是否正常运行。
URLSession
任务的完成块在后台线程上运行。
您不能从后台线程对UIKit对象进行显示更改。 您当前的代码正在执行此操作,此操作将无效。
您需要在对DispatchQueue.main.async()
的调用中,将代码像self.team1Score.text = team1
一样包装在完成代码块中
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.