如何从使用库或相机拍摄的UIImagePickerControllerPHAsset获取图像名称?

问题描述 投票:11回答:3

我想从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”))as as String)上崩溃。

swift uiimagepickercontroller
3个回答
5
投票

似乎Apple尚未将新的iOS 11键添加到信息字典中。因此,iOS 11代码将一直无效,因此将无法正常工作。查看此开放式雷达http://www.openradar.me/34404703

到目前为止,我发现的唯一解决方案是即使在iOS 11中也使用iOS 10代码块,而忽略UIImagePickerControllerReferenceURL已弃用的消息(该键仍然存在,并且在iOS 11中有效)

希望这会有所帮助


1
投票

如果您有权访问用户的图片库,则可以从PHAsset中实际获得UIImagePickerController值。似乎UIImagePickerController不会代表您要求许可,因此您需要自己执行此操作。

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


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)
            }
© www.soinside.com 2019 - 2024. All rights reserved.