我在refreshQuote()
函数完成后调用刷新标签。查看日志以查看label.text
发生的情况时,我可以看到它已被替换,但视图看起来仍然相同。
我从refreshQuote()
致电viewDidload
。
直接从viewDidLoad调用setQuoteLabel
时,一切正常
请帮助,现在失去希望。 提前致谢
func refreshQuote()
{
var url : String = "https://api.parse.com/1/classes/Quotes"
var request : NSMutableURLRequest = NSMutableURLRequest()
request.addValue("------", forHTTPHeaderField: "X-Parse-Application-Id")
request.addValue("------strong text", forHTTPHeaderField: "X-Parse-REST-API-Key")
request.URL = NSURL(string: url)
request.HTTPMethod = "GET"
NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue(), completionHandler:{ (response:NSURLResponse!, data: NSData!, error: NSError!) -> Void in
var error: AutoreleasingUnsafeMutablePointer<NSError?> = nil
NSLog(error.debugDescription);
let jsonResult: NSDictionary! = NSJSONSerialization.JSONObjectWithData(data, options:NSJSONReadingOptions.MutableContainers, error: error) as? NSDictionary
if (jsonResult != nil)
{
var allResults: NSArray = jsonResult["results"] as NSArray
var pickedResult: NSDictionary = allResults[0] as NSDictionary
let q:String = pickedResult["message"] as String!
self.setQuoteLabel(q);
} else
{
// couldn't load JSON, look at error
}
})
}
func setQuoteLabel (quote:String)
{
NSLog(quote)
quoteLabel.text = quote;
quoteLabel.setNeedsDisplay();
NSLog(quoteLabel.text!)
}
答案 0 :(得分:4)
所有UI组件都必须从主线程更新,而在您的情况下,您最有可能从不同的线程更新,因为代码在异步块中。
要强制在主线程中执行代码块,可以使用dispatch_async
,如下所示:
dispatch_async (dispatch_get_main_queue ()) {
self.setQuoteLabel(q)
}