从完成处理程序调用时,XCode 6 UILabel不刷新文本

时间:2014-10-18 15:04:57

标签: xcode view swift uilabel refresh

我在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!)

}

1 个答案:

答案 0 :(得分:4)

所有UI组件都必须从主线程更新,而在您的情况下,您最有可能从不同的线程更新,因为代码在异步块中。

要强制在主线程中执行代码块,可以使用dispatch_async,如下所示:

dispatch_async (dispatch_get_main_queue ()) {
    self.setQuoteLabel(q)
}