我有以下代码从CloudKit获取数据,检查属性"已完成"如果是,则为false并向taskCount添加一个。
在迭代完任务后,它会更新按钮的内容和颜色。
问题是代码全部执行后,视图实际更新需要几秒钟,按钮上的数字以及要更改的颜色。
在更新按钮颜色和内容后,有没有办法可以强制刷新?
let taskManager = CloudKitTaskManager(database: CKContainer.defaultContainer().privateCloudDatabase)
taskManager.getSummaryOfTasks {
tasks in
for index in 0...tasks.count-1 {
if ("False" == tasks[index].completed){
self.taskCount = self.taskCount + 1
}
}
self.dueButton.setTitle(String(self.taskCount) + "\nOutstanding", forState: UIControlState.Normal)
if (self.taskCount == 0) {
self.dueButton.backgroundColor = UIColor(red:52/255, green:152/255, blue:219/255, alpha:1.0)
self.dueButton.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal)
}else if(self.taskCount > 0 && self.taskCount <= 5){
self.dueButton.backgroundColor = UIColor(red:243/255, green:156/255, blue:18/255, alpha:1.0)
self.dueButton.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal)
}else if(self.taskCount > 5){
self.dueButton.backgroundColor = UIColor(red:231/255, green:76/255, blue:60/255, alpha:1.0)
self.dueButton.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal)
}
}
感谢您提前提供任何帮助。
答案 0 :(得分:1)
不保证CloudKit方法的完成处理程序在主队列上运行,因此您必须将与用户界面相关的代码分配给它:
let taskManager = CloudKitTaskManager(database: CKContainer.defaultContainer().privateCloudDatabase)
taskManager.getSummaryOfTasks {
tasks in
for index in 0...tasks.count-1 {
if ("False" == tasks[index].completed){
self.taskCount = self.taskCount + 1
}
}
dispatch_async(dispatch_get_main_queue()) {
self.dueButton.setTitle(String(self.taskCount) + "\nOutstanding", forState: UIControlState.Normal)
if (self.taskCount == 0) {
self.dueButton.backgroundColor = UIColor(red:52/255, green:152/255, blue:219/255, alpha:1.0)
self.dueButton.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal)
}else if(self.taskCount > 0 && self.taskCount <= 5){
self.dueButton.backgroundColor = UIColor(red:243/255, green:156/255, blue:18/255, alpha:1.0)
self.dueButton.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal)
}else if(self.taskCount > 5){
self.dueButton.backgroundColor = UIColor(red:231/255, green:76/255, blue:60/255, alpha:1.0)
self.dueButton.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal)
}
}
}