我有一个庞大且耗时的例程(calculatePower)需要一个完成处理程序,以便它同步运行。请求的触发器是UIButton。它被称为:
func application(application: UIApplication!, performFetchWithCompletionHandler completionHandler: ((UIBackgroundFetchResult) -> Void)!) {
calculatePower() {
completionHandler(UIBackgroundFetchResult.NewData)
}
}
calcualtePower中完成处理程序的重要位读作:
func calculatePower(completionHandler: (() -> Void)!) {
completionHandler()
}
我是否做到了这一点,如果是这样,我会调用application()?
application()
ain&#ttttt。
答案 0 :(得分:1)
dispatch_async
不是你打电话的东西。如果您配置了后台下载,那么运行时会调用它。你的情况似乎与后台下载没有任何关系(是吗?)所以我会说你完全咆哮了错误的树。如果您想将耗时的计算卸载到后台,您需要了解GCD和后台队列(即dispatch_async
)。之后您可以轻松地返回主线程(使用另一个{{1}})。
答案 1 :(得分:0)
解决方案读起来,非常感谢Matt。
@IBAction func buttonCalculatePower(sender: AnyObject) {
self.calculateButton.setTitle("Calculating", forState: .Normal)
self.calculateButton.backgroundColor = UIColor.lightGrayColor()
self.calculateButton.enabled = false
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
self.calculatePower()
dispatch_async(dispatch_get_main_queue()) {
self.calculateButton.backgroundColor = UIColor.orangeColor()
self.calculateButton.setTitle("Start", forState: .Normal)
self.calculateButton.enabled = true
}
}
}