這裏是我的代碼,我的問題是,我想在異步調用後等待結果。所以我嘗試使用信號量,但不會調用dispatch_semaphore_signal
,所以出現了死鎖。我不知道如何解決這個問題。誰能告訴我發生了什麼事,非常感謝dispatch_semaphore_signal將不會調用PHImageManager requestImageDataForAsset調用
extension PHAsset{
func getAVAssetRepresent() -> AVURLAsset?{
var asset:AVURLAsset?
let semaphore = dispatch_semaphore_create(0)
let queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
dispatch_async(queue) {() -> Void in
switch self.mediaType{
case .Image:
PHImageManager.defaultManager().requestImageDataForAsset(self, options: nil) { (_, _, _, info) -> Void in
if let _ = info , let url = info!["PHImageFileURLKey"] as? NSURL{
asset = AVURLAsset(URL: url)
}
dispatch_semaphore_signal(semaphore)
}
default :
dispatch_semaphore_signal(semaphore)
}
}
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
return asset
}
你信號燈的使用是correct--並根據PHImageManager類的引用,該塊應該進入,即使是在一個事件錯誤/失敗。你確定你在等待足夠的時間才決定它僵局嗎?你有沒有嘗試在你的'requestImageDataForAsset'完成塊中放置一個斷點,看看你是否曾經進入過? –
我想我已經等待了足夠的時間,但它永遠不會進入'requestImageDataForAsset'完成塊,如果沒有信號量存在,完成塊將被調用 – billwang1990