【发布时间】:2016-11-06 02:53:54
【问题描述】:
我正在使用第三方库从照片库中选择多个图像。在选择多个图像时,它会返回一个 PHAsset 对象数组。 现在,我想将这些对象的 URL(或一些引用)保存在核心数据中。但我不知道如何获取 URL。是否有任何其他参考可以存储在核心数据中,可以帮助我从照片库中获取相同的图像?
【问题讨论】:
我正在使用第三方库从照片库中选择多个图像。在选择多个图像时,它会返回一个 PHAsset 对象数组。 现在,我想将这些对象的 URL(或一些引用)保存在核心数据中。但我不知道如何获取 URL。是否有任何其他参考可以存储在核心数据中,可以帮助我从照片库中获取相同的图像?
【问题讨论】:
我使用了@iMHitesh Surani 答案,它运行良好,我将其转换为 Swift 3.1 并将其放入 PHAsset 的扩展中,以便在任何地方使用该方法,这里是:
extension PHAsset {
func getURL(completionHandler : @escaping ((_ responseURL : URL?) -> Void)){
if self.mediaType == .image {
let options: PHContentEditingInputRequestOptions = PHContentEditingInputRequestOptions()
options.canHandleAdjustmentData = {(adjustmeta: PHAdjustmentData) -> Bool in
return true
}
self.requestContentEditingInput(with: options, completionHandler: {(contentEditingInput: PHContentEditingInput?, info: [AnyHashable : Any]) -> Void in
completionHandler(contentEditingInput!.fullSizeImageURL as URL?)
})
} else if self.mediaType == .video {
let options: PHVideoRequestOptions = PHVideoRequestOptions()
options.version = .original
PHImageManager.default().requestAVAsset(forVideo: self, options: options, resultHandler: {(asset: AVAsset?, audioMix: AVAudioMix?, info: [AnyHashable : Any]?) -> Void in
if let urlAsset = asset as? AVURLAsset {
let localVideoUrl: URL = urlAsset.url as URL
completionHandler(localVideoUrl)
} else {
completionHandler(nil)
}
})
}
}
}
【讨论】:
selectedAssets[0].PHAsset.getURL() { url in ... your code to use url here} 或selectedAssets[0].getURL() { url in ... your code to use url here}
contentEditingInput 是 nil。有谁知道为什么会这样,在这种情况下我该怎么办?