无法在swift iOS中使用dispatch\u async方法更新UILabel
我使用dispatch\u async方法将json字符串值设置为UILabel。但它无法显示更新的值,但当我打印标签文本时,它会显示更新的值。这是我的密码-无法在swift iOS中使用dispatch\u async方法更新UILabel,ios,swift,Ios,Swift,我使用dispatch\u async方法将json字符串值设置为UILabel。但它无法显示更新的值,但当我打印标签文本时,它会显示更新的值。这是我的密码- override func viewDidLoad() { super.viewDidLoad() get_detail_postmethod(url, params: params) } func get_detail_postmethod(url: String, params: String) {
override func viewDidLoad() {
super.viewDidLoad()
get_detail_postmethod(url, params: params)
}
func get_detail_postmethod(url: String, params: String) {
let request = NSMutableURLRequest(URL: NSURL(string: url)!)
request.HTTPMethod = "POST"
let postString = params
print("param=\(params)")
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data, response, error in
guard error == nil && data != nil else { // check for fundamental networking error
print("error=\(error)")
return
}
if let httpStatus = response as? NSHTTPURLResponse where httpStatus.statusCode != 200 { // check for http errors
print("statusCode should be 200, but is \(httpStatus.statusCode)")
print("response = \(response)")
}
let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding)
print("responseString = \(responseString)")
do{
let json = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments)
print(json)
if let success = json["success"] as? Int
{
if((success) == 1){
self.extract_json(data!)
}
else{
}
}
}catch {
print("Error with Json: \(error)")
}
}
task.resume()
}
下面是提取json数据并将字符串值设置为UILabel的代码-
func extract_json(jsonData:NSData)
{
let json: AnyObject?
do {
json = try NSJSONSerialization.JSONObjectWithData(jsonData, options: [])
print("full data \(json!)")
} catch {
json = nil
return
}
let user_object = json!["opportunity_master"] as! NSArray
let data_block = user_object[0] as? NSDictionary
self.opp_title = (data_block!["opportunity_title"] as? String)!
self.event_sdate = (data_block!["event_start_date"] as? String)!
dispatch_async(dispatch_get_main_queue(), {
print(self.opp_title)
self.Event_title.text? = self.opp_title
self.Txt_event_date.text = self.event_sdate
self.Event_title.setNeedsDisplay()
print("event title label \(self.Event_title.text)")
})
}
我无法更新值。请建议是否有其他方法来实现更新UiLabel文本。请尝试以下代码来更新标签:
NSOperationQueue.mainQueue().addOperationWithBlock({ () -> Void in
print(self.opp_title)
self.Event_title.text? = self.opp_title
self.Txt_event_date.text = self.event_sdate
self.Event_title.setNeedsDisplay()
print("event title label \(self.Event_title.text)")
})
在ViewDidDisplay中调用get_detail_postmethod(url,params:params)方法而不是viewDidLoad。您的
调度\u async
方法中存在语法错误。使用以下命令更新代码块
dispatch_async(dispatch_get_main_queue()) {
print(self.opp_title)
self.Event_title.text? = self.opp_title
self.Txt_event_date.text = self.event_sdate
self.Event_title.setNeedsDisplay()
print("event title label \(self.Event_title.text)")
}
通过如下调用Viewcontroller可以解决此问题-
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let Opprt_Controller = storyboard.instantiateViewControllerWithIdentifier("Opprtunity_Event") as! Opportunity_Event
self.navigationController!.pushViewController(Opprt_Controller, animated: true)
请任何人帮助我解决此问题。显示事件标题标签的日志。即使放置日志的屏幕截图,我也无法在视图中获取以前的控制器数据值。请尝试self.event\u title.text而不是self.event\u title.text?这没有发生,请为此提供其他解决方案