- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我的代码,我的问题是我想在异步调用后等待结果。所以我尝试使用信号量,但是 dispatch_semaphore_signal
从未被调用,所以出现了死锁。我不知道如何解决这个问题。谁能告诉我发生了什么,非常感谢
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
}
最佳答案
因此,在进一步查看您的代码后,我认为您的代码可能自相矛盾。
您创建了一个信号量以确保您的 requestImageDataForAsset
在继续之前完成执行。这表明您希望您的请求同步执行,并且您不希望在请求完成之前发生任何事情。
但是,您还可以在全局并发调度队列上异步调度您的requestImageDataForAsset
。这样做表明您希望您的请求在后台异步发生
所以我相信,如果您希望您的请求同步发生,您应该简单地删除您的dispatch_async(queue)...
调用。
如果您希望您的请求发生异步,您应该删除dispatch_semaphore
。
但是,如果你想保持现在的代码,你将需要搅动运行循环以继续执行(特别是在这种情况下,你异步发送的请求)
是这样的:(请原谅 Objective-C,不幸的是我对 swift 没有信心)
while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
beforeDate:[NSDate dateWithTimeIntervalSinceNow:10]];
关于swift - dispatch_semaphore_signal 不会调用 PHImageManager requestImageDataForAsset,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34012651/
我正在尝试从 PHAsset 请求完整图像。 我的代码如下 @IBAction func nextTap(sender: AnyObject) { for asset in _
我在 iOS8.1 上使用照片框架并使用 requestImageDataForAsset 请求 Assets 的图像数据...大部分时间它都有效,我得到图像数据和包含您在下面看到的内容的字典。但有时
这是我的代码,我的问题是我想在异步调用后等待结果。所以我尝试使用信号量,但是 dispatch_semaphore_signal 从未被调用,所以出现了死锁。我不知道如何解决这个问题。谁能告诉我发生了
我已经坚持了几天。我一直试图在回调中获取图像,但我总是得到 nil。这些是我使用的选项: let options = PHImageRequestOptions() opti
iOS9.3beta3, PHImageManager requestImageDataForAsset 返回指向照片的 imageData,尽管 PHAssert 是在设备上捕获的视频 Assets
我正在使用 PHImageManagers 的 requestImageDataForAsset 来计算相机胶卷中特定照片的内存大小。它在我的设备上运行良好,但一些用户在计算内存大小(通过分析和崩溃报
我是一名优秀的程序员,十分优秀!