我有一个显示状态的标签。我使用此函数更新状态,该函数从我的数据库中获取0到3之间的数字。
标签声明为弱:
@IBOutlet weak var dealProgressLabel: UILabel!
然后
func updateDealStatus(){
dealProgressActivityIndicator.startAnimating()
api.loadDealDetails(dealIdent!, completionHandler: { (status, error ) -> Void in
if error != nil{
print(error)
}
else{
if let dealStatusProgr = status{
print("deal status is now\(dealStatusProgr)")
dispatch_async(dispatch_get_main_queue()){
self.setDealProgressStatusLabel(Int(dealStatusProgr)!)
self.dealProgressActivityIndicator.stopAnimating()
self.refreshControl?.endRefreshing()
}
}
}
})
}
然后我只使用一个开关来改变文本标签:
func setDealProgressStatusLabel(dealProgress: Int){
switch dealProgress {
case 0:
dispatch_async(dispatch_get_main_queue()){
self.dealProgressLabel.text = "Waiting for Payment"
self.dealProgressLabel.textColor = UIColor.redColor()
self.navigationItem.rightBarButtonItem = self.paymentButton
}
case 1:
dispatch_async(dispatch_get_main_queue()){
self.dealProgressLabel.text = "Waiting to Redeem"
self.dealProgressLabel.textColor = UIColor.darkGrayColor()
// self.navigationItem.rightBarButtonItem = self.disputeButton
self.navigationItem.rightBarButtonItem = nil
}
case 2:
dispatch_async(dispatch_get_main_queue()){
self.dealProgressLabel.text = "Waiting for Review"
self.dealProgressLabel.textColor = UIColor.darkGrayColor()
self.navigationItem.rightBarButtonItem = self.addReviewButton
}
case 3:
dispatch_async(dispatch_get_main_queue()){
self.dealProgressLabel.text = "Completed"
self.dealProgressLabel.textColor = UIColor.darkGrayColor()
self.navigationItem.rightBarButtonItem = nil
}
default:
self.dealProgressLabel.text = ""
}
}
问题在于,如果我处理付款,标签会正确显示下一个状态“等待兑换”。
然而,当我使用:
刷新tableView时func reloadModelWhenPull(sender:AnyObject){
updateDealStatus()
}
“等待付款”和“等待兑换”两个文本相互叠加显示。
当我再次拉动时,“等待付款”消失了。
print("deal status is now\(dealStatusProgr)")
始终显示正确的状态编号,因此我不知道该怎么办。
最后,我在updateDealStatus
viewWillAppear
override func viewWillAppear(animated: Bool) {
updateDealStatus()
}
********* UPDATE ******* ********
我保持清爽,我发现问题大约在前60/90秒左右发生。之后它总是只显示正确的文字? 有什么想法吗?
********* UPDATE2 ******* ********
如果我在拉动刷新之前等待大约10秒钟,则问题不会发生。如果我可以立即开始刷新,那么就会无关紧要地发生
答案 0 :(得分:1)
func setDealProgressStatusLabel(dealProgress: Int){
self.dealProgressLabel.text = "" //Empty as method starts
...
}
它会设置""在分配新值之前。
答案 1 :(得分:0)
我刚改变了这个并且它有效:
let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT
dispatch_async(dispatch_get_global_queue(priority, 0)) {
// moved my switch here
self.setDealProgressStatusLabel(Int(dealStatusProgr)!)
dispatch_async(dispatch_get_main_queue()){
print(dealStatusProgr)
self.dealProgressActivityIndicator.stopAnimating()
self.refreshControl?.endRefreshing()
}
}
this指出了正确的方向。