web-dev-qa-db-ja.com

PHAssetのURLを取得する方法

サードパーティのライブラリを使用して、フォトライブラリから複数の画像を選択しています。複数の画像を選択すると、PHAssetオブジェクトの配列を返します。次に、これらのオブジェクトのURL(またはいくつかの参照)をコアデータに保存します。しかし、私はURLを取得する方法がわかりません。フォトライブラリから同じ画像を取得するのに役立つ他の参照をコアデータに保存できますか?

8
Utsav Dusad

私は @ 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)
                }
            })
        }
    }
}
30
diegomen