Как получить имя изображения из UIImagePickerControllerPHAsset, взятого с помощью библиотеки или камеры?

Я хочу получить имя файла из UIImagePickerControllerPHAsset в ios 11.0.3. не удалось получить выбранное имя файла изображения с помощью этого кода. пожалуйста, помогите в этом?

  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
            }

Получение сбоев в файлеName = ((актив?.value(forKey: "filename" )) как? String)!

Ответ 1

Кажется, Apple не добавила новый ключ iOS 11 в словарь информации. Поэтому код iOS 11 не будет работать, поскольку он продолжает возвращать нуль. См. Этот открытый радар http://www.openradar.me/34404703

Единственное решение, которое я нашел до сих пор, - использовать код кода iOS 10 даже в iOS 11 и просто игнорировать устаревшее сообщение UIImagePickerControllerReferenceURL (ключ все еще существует и работает в iOS 11)

Надеюсь, что это поможет

Ответ 2

Если у вас есть доступ к пользовательской библиотеке фотографий, вы сможете получить значение PHAsset, как и ожидалось от UIImagePickerController. Кажется, что UIImagePickerController не будет запрашивать разрешения от вашего имени, поэтому вам придется сделать это самостоятельно.

Смотрите Определите, установлен ли доступ к библиотеке фотографий - PHPhotoLibrary, чтобы узнать, как вы можете проверить и запросить разрешения.

Ответ 3

Вы можете попробовать это...

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)
            }