【发布时间】:2016-08-22 10:42:51
【问题描述】:
我有以下函数假设返回 [CIImage] 用于我的目的 - 在 tableView 中显示照片的一些元数据。
func getCIImages() -> [CIImage] {
var images = [CIImage]()
let assets = PHAsset.fetchAssetsWithMediaType(.Image, options: nil)
for i in 0..<assets.count {
guard let asset = assets[i] as? PHAsset else {fatalError("Cannot cast as PHAsset")}
let semaphore = dispatch_semaphore_create(0)
asset.requestContentEditingInputWithOptions(nil) { contentEditingInput, _ in
//Get full image
guard let url = contentEditingInput?.fullSizeImageURL else {return}
guard let inputImage = CIImage(contentsOfURL: url) else {return}
images.append(inputImage)
dispatch_semaphore_signal(semaphore)
}
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER)
}
return images
}
但它停留在信号量等待中并且没有更进一步。我浏览了许多教程,但 GCD 的其他变体不起作用。我认为这是因为模拟器,我不知道,无法在真实设备上测试。请帮忙。
【问题讨论】:
-
你为什么要强制一个准同步请求?
-
@vadian 因为我想在
tableView中显示CIImages的一些元数据,并且可以通过一个tableView.reloadData()调用以同步方式完成。
标签: ios swift grand-central-dispatch semaphore phasset