web-dev-qa-db-ja.com

ライブラリまたはカメラで撮影したUIImagePickerControllerPHAssetから画像名を取得するにはどうすればよいですか?

IOS11.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?String)でクラッシュする!

11
User558

Appleは新しいiOS11キーを情報辞書に追加していないようです。したがって、iOS 11コードはnilを返し続けるため、機能しません。このオープンレーダーを参照してください http: //www.openradar.me/344047

私がこれまでに見つけた唯一の解決策は、iOS11でもiOS10コードブロックを使用し、UIImagePickerControllerReferenceURL非推奨メッセージを無視することです(キーはまだ存在し、iOS 11で機能します)

お役に立てれば

5

ユーザーの写真ライブラリにアクセスできる場合は、PHAssetから期待どおりにUIImagePickerController値を実際に取得できます。 UIImagePickerControllerがあなたに代わって権限を要求しないように思われるので、これを自分で行う必要があります。

フォトライブラリへのアクセスが設定されているかどうかを確認する-PHPhotoLibrary を参照して、権限を確認および要求する方法に関する関連の説明を参照してください。

1
Mikey

あなたはこれを試すことができます...

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