iosswiftphotosframework

How to get the name of file for reference url using Photos framework?


This is how I get an NSURL:

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {

    if let referenceUrl = info[UIImagePickerControllerReferenceURL] as? NSURL {
        //access the file name
    }
}

It was using ALAssetsLibrary:

let assetsLibrary = ALAssetsLibrary()
assetsLibrary.assetForURL(referenceUrl, resultBlock: { asset in

    let filename = asset.defaultRepresentation().filename()

}, failureBlock: nil)

but since iOS 9 it is deprecated.


Solution

  • The simplest answer:

    if let asset = PHAsset.fetchAssetsWithALAssetURLs([referenceUrl], options: nil).firstObject as? PHAsset {
    
        PHImageManager.defaultManager().requestImageDataForAsset(asset, options: nil, resultHandler: { _, _, _, info in
                            
            if let fileName = (info?["PHImageFileURLKey"] as? NSURL)?.lastPathComponent { 
                //do something with file name
            }
        })
    }