在我的应用程序中,我有一个函数可以生成NSRURLSession并使用以下命令发送NSURLRequest
sesh.dataTaskWithRequest(req, completionHandler: {(data, response, error)
在这个任务的完成块中,我需要做一些计算,将一个UIImage添加到调用的视图控制器中。我有一个func叫
func displayQRCode(receiveAddr, withAmountInBTC:amountBTC)
执行UIImage相加计算。如果我试图在完成块中运行添加视图的代码,Xcode抛出一个错误,指出我在后台进程中不能使用布局引擎。所以我在上找到了一些代码,尝试在主线程上排队一个方法:
let time = dispatch_time(DISPATCH_TIME_NOW, Int64(0.0 * Double(NSEC_PER_MSEC)))
dispatch_after(time, dispatch_get_main_queue(), {
let returned = UIApplication.sharedApplication().sendAction("displayQRCode:", to: self.delegate, from: self, forEvent: nil)
})
但是,我不知道如何将参数"receiveAddr“和"amountBTC”添加到此函数调用中。我该如何做到这一点,或者有人能建议一种最佳的方法来将方法调用添加到应用程序的主队列中?
发布于 2016-06-16 18:34:13
Swift 3+和Swift 4版本:
DispatchQueue.main.async {
print("Hello")
}
Swift 3和Xcode 9.2:
dispatch_async_on_main_queue {
print("Hello")
}
发布于 2018-09-10 19:21:58
在主线程上重新加载collectionView
DispatchQueue.main.async {
self.collectionView.reloadData()
}
发布于 2016-04-10 05:12:50
以下是更好的(IMO) Swifty/Cocoa样式语法,以实现与其他答案相同的结果:
NSOperationQueue.mainQueue().addOperationWithBlock({
// Your code here
})
或者你可以用更少的代码和更多的功能抓取流行的Async Swift library:
Async.main {
// Your code here
}
https://stackoverflow.com/questions/24985716
复制相似问题