如何从库或相机获取的UIImagePickerControllerPHAsset中获取图像名称?

时间:2017-10-26 10:13:07

标签: swift uiimagepickercontroller

我想从ios 11.0.3中的UIImagePickerControllerPHAsset获取文件名。无法使用此代码获取图像文件名。请帮忙吗?

  if #available(iOS 11.0, *) {
                let asset = info[UIImagePickerControllerPHAsset] as? PHAsset
                fileName = ((asset?.value(forKey: "filename")) as? String)!
            } else {
                // Fallback on earlier versions
                let url = info[UIImagePickerControllerReferenceURL] as! URL
                let assets = PHAsset.fetchAssets(withALAssetURLs: [url], options: nil)
                fileName = PHAssetResource.assetResources(for: assets.firstObject!).first!.originalFilename
            }

将fileName =((asset?.value(forKey:“filename”))崩溃为?String)!

3 个答案:

答案 0 :(得分:5)

Apple似乎没有在信息词典中添加新的iOS 11密钥。因此,iOS 11代码无法正常工作,因为它会一直返回nil。见这个开放式雷达http://www.openradar.me/34404703

到目前为止,我发现的解决方案是即使在iOS 11中也使用iOS 10代码块,只是忽略UIImagePickerControllerReferenceURL已弃用的消息(该密钥仍然存在且适用于iOS 11)

希望这有帮助

答案 1 :(得分:1)

如果您有权访问用户的照片库,那么您将能够按照PHAsset的预期实际获得UIImagePickerController值。似乎UIImagePickerController不会代表您请求权限,因此您需要自己执行此操作。

有关如何检查和请求权限的相关讨论,请参阅Determine if the access to photo library is set or not - PHPhotoLibrary

答案 2 :(得分:1)

您可以尝试...

if #available(iOS 11.0, *) {
                let asset = info[UIImagePickerControllerPHAsset] as! PHAsset
                var resources = PHAssetResource.assetResources(for: asset)
                var orgFilename = (resources[0]).originalFilename
                print("File Name: ",orgFilename)
            }