从Completion处理程序调用时,XCode 6 UILabel未刷新文本
我在函数完成后调用刷新标签。当查看日志以查看label.text的情况时,我可以看到它已被替换,但视图看起来仍然相同 我正在从从Completion处理程序调用时,XCode 6 UILabel未刷新文本,xcode,view,swift,uilabel,refresh,Xcode,View,Swift,Uilabel,Refresh,我在函数完成后调用刷新标签。当查看日志以查看label.text的情况时,我可以看到它已被替换,但视图看起来仍然相同 我正在从viewDidload调用refreshQuote()。 直接从viewDidLoad调用setQuoteLabel时,一切正常 请帮忙,现在失去希望了。 提前谢谢 func refreshQuote() { var url : String = "https://api.parse.com/1/classes/Quotes" var request :
viewDidload
调用refreshQuote()
。
直接从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!)
}
func refreshQuote()
{
变量url:字符串=”https://api.parse.com/1/classes/Quotes"
var请求:NSMutableURLRequest=NSMutableURLRequest()
request.addValue(“----”,用于HttpHeaderField:“X-Parse-Application-Id”)
request.addValue(“----强文本”,用于httpheaderfield:“X-Parse-REST-API-Key”)
request.URL=NSURL(字符串:URL)
request.HTTPMethod=“GET”
NSURLConnection.sendAsynchronousRequest(请求,队列:NSOperationQueue(),completionHandler:{(响应:NSURLResponse!,数据:NSData!,错误:NSError!)->中无效
var错误:AutoreleasingUnsafeMutablePointer=nil
NSLog(错误。调试说明);
将jsonResult:NSDictionary!=NSJSONSerialization.JSONObjectWithData(数据,选项:NSJSONReadingOptions.MutableContainers,错误:error)设为?NSDictionary
if(jsonResult!=nil)
{
var allResults:NSArray=jsonResult[“结果”]作为NSArray
var pickedResult:NSDictionary=allResults[0]作为NSDictionary
让q:String=pickedResult[“message”]作为字符串!
self.setQuoteLabel(q);
}否则
{
//无法加载JSON,请查看错误
}
})
}
func setQuoteLabel(引号:字符串)
{
NSLog(报价)
quoteLabel.text=quote;
quoteLabel.setNeedsDisplay();
NSLog(quoteLabel.text!)
}
所有UI组件都必须从主线程更新,而在您的情况下,很可能是从不同的线程更新,因为代码位于异步块中
要强制在主线程中执行代码块,可以使用dispatch\u async
,如下所示:
dispatch_async (dispatch_get_main_queue ()) {
self.setQuoteLabel(q)
}
所有UI组件都必须从主线程更新,而在您的情况下,很可能是从不同的线程更新,因为代码位于异步块中 要强制在主线程中执行代码块,可以使用
dispatch\u async
,如下所示:
dispatch_async (dispatch_get_main_queue ()) {
self.setQuoteLabel(q)
}
对于Swift 3,它应该是DispatchQueue.main.async(){self.setQuoteLabel(q);}对于Swift 3,它应该是DispatchQueue.main.async(){self.setQuoteLabel(q);}