PhotoPicker検出エラー:エラードメイン= PlugInKitコード= 13


118

フォトライブラリの画像をUIImageViewに表示しようとしています

完全なエラーは次のとおりです。

2017-06-09 21:55:59.063307 + 0200 firstapp2.0 [12873:1120778] PhotoPicker検出エラー:エラードメイン= PlugInKitコード= 13「クエリがキャンセルされました」UserInfo = {NSLocalizedDescription = query cancelled}

私のコードは以下に含まれています:

import UIKit

class ViewController: UIViewController,UIImagePickerControllerDelegate,UINavigationControllerDelegate{

    @IBOutlet weak var pic: UIImageView!
    @IBOutlet weak var text: UILabel!

    var chosenImage : UIImage!

    override func viewDidLoad() {
        super.viewDidLoad()        
        pic.isUserInteractionEnabled = true;
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [AnyHashable: Any]) {
        var chosenImage = info[UIImagePickerControllerEditedImage]
        self.pic!.image = chosenImage as! UIImage
        picker.dismiss(animated: true, completion: nil)
    }

    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
        picker.dismiss(animated: true, completion: nil)
    }

    @IBAction func tap(_ sender: Any) {        
        self.text.text = "Kreason"
        let imagePicker = UIImagePickerController()    
        imagePicker.delegate = self        
        imagePicker.sourceType = UIImagePickerControllerSourceType.photoLibrary
        imagePicker.allowsEditing = false    
        self.present(imagePicker, animated: true, completion: nil)
    }
}

11
同じエラーが発生しました。Xcode 9ベータ、iOS 11を使用していますか?
John

4
以前は機能していましたが、その後、iOS 11 Beta 4で突然このエラーが発生しました。とても奇妙。
user2153553 2017

2
同じエラーが発生し、実装はobj-cにあります。このエラーメッセージは、objective-cのUIImagePickerデリゲートメソッドで返された情報ディクショナリの型キャストに関連するものではありません。- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)infoディクショナリ値は、obj-cのIDとしてキャストされます。ユーザーの写真ライブラリにアクセスするための承認リクエストと処理も実装しました。それでもエラーメッセージが表示されます。info.plistファイルに、ユーザーの写真ライブラリで使用するプライバシーエントリを追加しました。
valeCocoa 2017年

2
それはライブラリから画像を取得し、後でそれを使用するために私を防ぐことはできません。しかし、私は...現在のバグを受け取る
shokuroff

3
私はすべての答えのすべての提案を組み合わせて試しましたが、役に立ちませんでした。
Nicolas Miari、2018年

回答:


39

Objective-Cを明示的に参照する必要があります。 @objc

@objc func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    let chosenImage = info[UIImagePickerControllerOriginalImage] as! UIImage
    image = chosenImage
    self.performSegue(withIdentifier: "ShowEditView", sender: self)
    dismiss(animated: true, completion: nil)
}

6
私のために働く。私は最近Swift 4とXcode 9にアップデートしましたが、これで解決しました。
user3144836 2017年

3
私のために働く。Swift 4.0への移行後に必要です。
mayankk2308 2017年

4
動作しません。このエラーはを呼び出した後に発生しましたdismiss
Kimi Chiu

奇妙な。これは私にとってはうまくいきましたが、xcodeは警告としてマークし、次のシグネチャを期待しています: `インスタンスメソッド'imagePickerController(:didFinishPickingMediaWithInfo :)'は、プロトコル 'UIImagePickerControllerDelegate' Make 'imagePickerController(_ :didFinishPickingMediaWithInfo :) 'この警告を沈黙させるためにプライベート `
Dark Castle

@DarkCastle extension [your class name]クラスの外のブロックに関数を書き込む必要があります。
プロメテオII

18

私はこの解決策を見つけました。下記の2つの理由により、このエラーが発生しました。

  1. まず、認証のためにこのメソッドを呼び出す必要があります

認証コード

func checkPermission() {
  let photoAuthorizationStatus = PHPhotoLibrary.authorizationStatus() switch photoAuthorizationStatus {
    case .authorized: print("Access is granted by user")
    case .notDetermined: PHPhotoLibrary.requestAuthorization({
      (newStatus) in print("status is \(newStatus)") if newStatus == PHAuthorizationStatus.authorized { / do stuff here */ print("success") }
    })
    case .restricted: / print("User do not have access to photo album.")
    case .denied: / print("User has denied the permission.")
  }
}
  1. メソッドの正しい方法 didFinishPickingMediaWithInfo

違う:

private func imagePickerController( picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
} 

正しい

@objc func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
} 

このソリューションがこのエラーの解決に役立つことを願っています。

それが機能する場合は、正しいものとしてマークすることを忘れないでください。これは、他の人が正しい方法を見つけるのに役立ちます。


Noob PSA:PHPhotoLibraryはSwiftの写真モジュールからのものです
Braden Holt

動作しません。エラーは電話をかけた後に発生しますpicker.dismiss(animated: true, completion: nil)
ForceBru

17

見つけた!「写真」に対する権限がないことを通知しようとしています#import <Photos/Photos.h>。たとえば、Objective-Cにこのようにを含めて、権限をリクエストする必要があります。

これがあなたの時間を節約することを願っています。私はこれを丸一日丸ごとデバッグしました!

[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
    switch (status) {
        case PHAuthorizationStatusAuthorized:
            NSLog(@"PHAuthorizationStatusAuthorized");
            break;
        case PHAuthorizationStatusDenied:
            NSLog(@"PHAuthorizationStatusDenied");
            break;
        case PHAuthorizationStatusNotDetermined:
            NSLog(@"PHAuthorizationStatusNotDetermined");
            break;
        case PHAuthorizationStatusRestricted:
            NSLog(@"PHAuthorizationStatusRestricted");
            break;
    }
}];

Swiftで同じことをする方法を誰かがあなたに教えることができると私は確信しています。


1
#import <Photos / Photos.h>を必ず含めてください
Robert Wohnoutka 2017

6
これは私の問題を解決しませんでした。
fi12、2018年

1
コンソールに次のメッセージが表示されます "プライベート実効ユーザー設定から読み取ります。拡張機能の検出中にエラーが発生しました:エラードメイン= PlugInKitコード= 13"クエリがキャンセルされました "UserInfo = {NSLocalizedDescription = query cancelled}"。それは問題を解決しませんでした。
Biranchi 2018年

15

いくつかの組み合わせの応答を試したが、あまり成功しなかった。

Swift 4を使用して、画像が選択されてピッカーに配置されたことを確認するために、次の2つの項目が実装されていることを確認する必要があることがわかりました(拡張機能の検出中に「[discovery]エラーが発生したことに注意してください:

エラードメイン= PlugInKitコード= 13「クエリがキャンセルされました」UserInfo = {NSLocalizedDescription = query cancelled} "

メッセージは引き続きコンソールに表示されますが、画像の追加を妨げるものではありません)。たぶんこれはピッカーが解雇されるというメッセージでしょうか?

1)のためのデリゲートがUIImagePickerControllerある(UIImagePickerControllerDelegate & UINavigationControllerDelegate)?明示的に追加するので、必要UINavigationControllerDelegateなプロトコルの一つとして:

class ViewController:UIViewController, UIImagePickerControllerDelegate, 
    UINavigationControllerDelegate { .... }. 

2)info.plistにPrivacy - Photo library Usage Descriptionキーと文字列値が設定されていることを確認します。

もちろん、を作成しUIImagePickerController、そのデリゲートをselfinに等しく設定する必要がありますViewDidLoad()

class ViewController:UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate { 
    let imagePickerController = UIImagePickerController()
    override func viewDidLoad() {
        super.viewDidLoad()
        imagePickerController.delegate = self
    }
    ...
}

4
私はこのすべてを自分のプロジェクトに持っています。それでもうまくいきません
Mohamed Lee

おかげで、viewDidLoad()でデリゲートを設定できませんでした
Arshad

11

この問題を修正しました。以下の関数をviewdidloadまたはviewWillAppearまたはviewDidAppearに呼び出して、アプリの権限を確認してください。

func checkPermission() {
        let photoAuthorizationStatus = PHPhotoLibrary.authorizationStatus()
        switch photoAuthorizationStatus {
        case .authorized:
            print("Access is granted by user")
        case .notDetermined:
            PHPhotoLibrary.requestAuthorization({
                (newStatus) in
                print("status is \(newStatus)")
                if newStatus ==  PHAuthorizationStatus.authorized {
                    /* do stuff here */
                    print("success")
                }
            })
            print("It is not determined until now")
        case .restricted:
            // same same
            print("User do not have access to photo album.")
        case .denied:
            // same same
            print("User has denied the permission.")
        }
    }

上記のメソッドを使用するにimport Photosは、クラスの先頭に追加することを忘れないでください。


11

XCODE 10.1 / SWIFT 4.2:

  1. 必要な権限を追加します(他の人が言及)

  2. このデリゲート関数を実装します。

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
    
        if let pickedImage = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
            self.imgView.contentMode = .scaleAspectFit
            self.imgView.image = pickedImage
        }
    
        dismiss(animated: true, completion: nil)
    }

1
Swift 4xでimagePickerController funcを使用する真の方法
Samet

10

* Swift 3にDELEGATEがありません*

私の場合、すべての設定は正しいもの
でした。1-デリゲート(UIImagePickerControllerDelegate、UINavigationControllerDelegate);
2-権限は確認済みです。
3-Plistはすでに完了しています。
4-この回答についてすべて読んだので、私はしました。

しかし、私は実装pickerview.delegate = selfするのを忘れていましたviewDidLoad 、他のviewControllerからCOPYとPASTE、それを忘れてしまいました!

私はそれが誰かを助けることを望みます、あなたのコピー/ペーストを最初にレビューしてください!!!


おかげで、長い間苦労していて、「UINavigationControllerDelegate」を逃してしまいました。最後に保存しました。ありがとう
Sakthimuthiah

喜んでお手伝いします:)
Daniel Arantes Loverde

8

これは最も直接役立つ回答ではないかもしれませんが、うまくいけば役立つでしょう!この特定のエラーメッセージが実際の問題を示しているのではないことを、99%確信しています。私はこれとまったく同じ問題で髪を抜くのに何時間も費やしました。

1)ピッカーを起動するときにコンソールに写真を印刷する権限がありました。2)ナビゲートして写真を簡単に選択できるようになりました。3)ピッカーを閉じてビューに戻ると、ボタンの画像が表示されます。新しい写真で更新されていません...そして私が問題にした唯一のヒントは、あなたが受け取っているのとまったく同じエラーメッセージでした。

ViewDidLoadではなくViewWillAppearでプレースホルダー画像をハードコーディングしていたことがわかりました。ピッカーが閉じるたびに、ViewWillAppearが呼び出され、選択した画像がハードコードされた画像に置き換えられました。私はその問題を修正し、十分に確信しています-今はすべて正常に動作しています...そして、ピッカーから戻るたびにそのエラーメッセージがまだ表示されています。

問題についてはImagePicker以外の場所を探すことをお勧めします。


7

まだ行っていない場合は、してみてくださいこれを

製品>スキーム>スキームの編集>環境変数 OS_ACTIVITY_MODE: disable

それは私の問題を解決します。


23
これはエラーメッセージを抑制しますが、その原因には対処しません。また、他のシステムメッセージやからのメッセージも抑制しますNSLog
ジョンモンゴメリー

6
これは問題を「解決」するのではなく、単に見えなくするだけです。非常に悪い習慣です。
zeeshan

これは、敷物の下に汚れを隠すのと同じです
シブ

7

これにより、Swift 4の問題が修正されます。

以下のコードを変更してください

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

これに:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {}


Swift 4.2 update:
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]){}

私のエラーは次のようなものでした:拡張機能の検出中にエラーが発生しました:エラーDomain = PlugInKit Code = 13 "query cancelled" UserInfo = {NSLocalizedDescription = query cancelled}そして、これは私の問題を解決しましたが、これがOPに役立つかどうか話せません。ありがとう:)
agrippa

6

ピッカーコールバックから別のコントローラーを提示しようとしたときにも同じメッセージが表示されましたimagePickerController。私のために働いた解決策は、ピッカーのdismissメソッドから完了コールバック内に私のコードを移動することでした

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
        picker.dismiss(animated: true) {
            if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage {
                let cropController:CropViewController = CropViewController(croppingStyle: .circular, image: pickedImage)
                cropController.delegate = self
                self.present(cropController, animated: true, completion: nil)
            }
        }
    }

グレート答え、あなたは私の時間👍🏼保存
コーダーACJHP

素晴らしかった!これがSwift 4.xのピッカーエラーに対処する正しい方法だと思います。
shiv

4

両方をサブクラス化していることを確認してください: UIImagePickerControllerDelegate, UINavigationControllerDelegate

また、デリゲートを設定することを忘れないでください:

let picker = UIImagePickerController()
picker.allowsEditing = true
picker.sourceType = .photoLibrary
picker.delegate = self  //Don't forget this line!
self.present(picker, animated: true, completion: nil)

このソースへのクレジット。


picker.delegate = self —私のケースでした!ありがとうございました。
Alexey Chekanov

4

この問題の解決策を見つけるのは永遠にかかりました。問題は、UIImagePickerControllerDelegateの関数imagePickerControllerが見つからないことです。デリゲートを正しく設定し、Swift 4へのアップグレード後に機能が停止した場合、問題はおそらく、Swift 4以降に必要な@objcを使用してObjective-Cにアクセス可能にしていないことです。

それは:

@objc func imagePickerController(...

の代わりに

func imagePickerController(...

これは、エラーを作成Objective-C method 'imagePickerController:didFinishPickingMediaWithInfo:' provided by method 'imagePickerController(_:didFinishPickingMediaWithInfo:)' conflicts with optional requirement method 'imagePickerController(_:didFinishPickingMediaWithInfo:)' in protocol 'UIImagePickerControllerDelegate'
ニコ・ニール

まさに、これはそれを修正する方法です!
マリアオルテガ

@NicoNeill extensionブロックに関数を追加しましたか?
プロメテオII

4

画像を設定するときに1秒の遅延を設定することで修正しました。

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

    if let image = info[UIImagePickerControllerOriginalImage] as? UIImage {

        picker.dismiss(animated: false, completion: nil)
        DispatchQueue.main.asyncAfter(deadline: .now() + 1.0, execute: {
            self.discussionImage.image = image
        })
    }
}

3

必ずinternal func最初に追加してから、括弧の後に小文字を追加してください(_ picker: UIImagePickerController…次にからAnyObjectに変更してAnyください)…
以下のコードを確認してください:

internal func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage {

        userPhoto.image = pickedImage

    }

    self.dismiss(animated: true, completion: nil)
}

3

これは私を困らせましたが、以下のリンクでの答えは私のために働きました。エラーはなくなり、画像は期待どおりに表示されます

上記の答えの1つと同様に、関数の前に(_ picker...もなければなりません@objc

@objc func imagePickerController(_ picker: UIImagePickerController, didFinishPickingImage image: UIImage!, editingInfo: [NSObject : AnyObject]!) {
...
}

https://forums.developer.apple.com/thread/82105


2

これは私のエラーを解決しました:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage
    addPhotoBtn.setImage(pickedImage, for: .normal)
    dismiss(animated: true, completion: nil)


}

func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
    dismiss(animated: true, completion: nil)

}

2

次の手順で確認してください。

  1. 写真をインポート
  2. アルバムへのアクセス権があります:

    func authorizeToAlbum(completion:@escaping (Bool)->Void) {
    
    if PHPhotoLibrary.authorizationStatus() != .authorized {
        NSLog("Will request authorization")
        PHPhotoLibrary.requestAuthorization({ (status) in
            if status == .authorized {
                DispatchQueue.main.async(execute: {
                    completion(true)
                })
            } else {
                DispatchQueue.main.async(execute: {
                    completion(false)
                })
            }
        })
    
    } else {
        DispatchQueue.main.async(execute: {
            completion(true)
        })
    }
    }
  3. 現在のUIImagePickerController

    self.authorizeToAlbum { (authorized) in
        if authorized == true {
            let picker = UIImagePickerController()
            picker.delegate = self
            picker.allowsEditing = false
            picker.sourceType = .photoLibrary
    
            self.present(picker, animated: true, completion: nil)
        }
    }
  4. 重要なステップは、デリゲートメソッドが厳密に以下のようなものであることを確認することです。

    // MARK: - UIImagePickerControllerDelegate Methods
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage {
        self.pickedImage = pickedImage
        if let finalImage = handleImage(originalImage: self.pickedImage!, maskImage: self.maskImage!) {
            self.imageView.image = finalImage
        }
    }
    
    dismiss(animated: true, completion: nil)
    }

2

これは私がやったことで、私の問題を解決しました。

  • @objcを追加
  • 内部を追加
  • imagePickerの前に_を追加します
  • AnyObjectではなくAnyを使用していることを確認してください

お役に立てれば!


うーん、internalデフォルトです。それを指定することでどのような違いがあるのか​​と思います...
ニコラス・ミアリ

2

私の場合、ユーザーが画像へのアクセスを許可したかどうかを最初に確認せずに画像ピッカーコントローラーを提示していたため、このエラーが発生しました。私のコードの他の場所でユーザーが許可を与えたので、私がする必要があるのは写真をインポートすることだけだったと思います。ただし、イメージピッカーコントローラーを提示する直前にアプリでこれを追加するときに、その時点で許可を与えられていない可能性があるため、問題は解決されました(写真もインポート)。

// request photos permission if permission has not been granted
    if PHPhotoLibrary.authorizationStatus() != PHAuthorizationStatus.authorized {
        PHPhotoLibrary.requestAuthorization({ (status: PHAuthorizationStatus) in

        })
    }

この答えが冗長に思える場合は私の謝罪ですが、私の解決策を機能させるためにいくつかの異なる答えを組み合わせなければなりませんでした。おそらく、これはSwift 4を使用している他の誰かを助けるでしょう。


2

このコードを使用

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any])

2

この「Error Domain = PlugInKit Code = 13」エラーは、害のないアップルデバッグメッセージのように見えますが、多くの人々を混乱させています。選択した画像をUIに設定するのに問題があり、そのエラーが問題であると思いましたが、少し微妙な問題でした。

イメージピッカーコントローラーを、それを表示しているビューコントローラーとは別のファイルに入れています。

MyViewController.swift

class MyViewController: UIViewController {
    @IBOutlet weak var profileImage: UIImageView!

    ...
}

extension MyViewController: ImagePickerDelegate {
    func didSelect(image: UIImage?) {
        self.profileImage.image = image
    }
}

ImagePicker.swift

open class ImagePicker: NSObject {
    ...
    private func pickerController(_ controller: UIImagePickerController, didSelect image: UIImage?) {
        controller.dismiss(animated: true, completion: {self.delegate?.didSelect(image: image)}
        )
    }
}

ほとんどのチュートリアルと回答では、完了がnilに設定されています。ただし、補完をnilに設定し、デリゲートのdidSelectメソッドを個別に呼び出すと、メソッドは呼び出されますが、画像は設定されないため、必ずdismiss補完を使用してください。

繰り返しになりますが、この回答が元の質問に直接関連していない可能性があることは知っていますが、この問題のために多くの人々がここに来ており、与えられた解決策が役に立たないと感じています。その理由は、回答を提供するほとんどの人が、メインのビューコントローラーと同じクラスにイメージピッカーコントローラーを持っているため、補完を使用する必要がないためです。


これはまさに私が必要としたものです。ありがとうございました!
AJヘルナンデス

1

このエラーは、フォトライブラリの使用権限Info.plistファイルに設定していない場合にも発生します。

あなたは追加する必要がPrivacy - Photo Library Usage DescriptionInfo.plist文字列あなたのアプリケーションは、ユーザーのフォトライブラリにアクセスするための最初の時間をしようとしたときに表示されます。

最終的なInfo.plist調整は次のようになります。 ここに画像の説明を入力してください


1

私は同じエラーがあり、次のように修正しました:

UIImagePickerControllerに依存するさまざまな方法で画像オブジェクトを取得するallowsEditingはtrueまたはfalse

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

    if isImagePickerAllowEditing {
        sourceImage = info[UIImagePickerControllerEditedImage] as? UIImage
    } else {
        sourceImage = info[UIImagePickerControllerOriginalImage] as? UIImage
    }

    ....

}

そしてもちろん、上記のコメントのように、最初に写真ライブラリへのアクセス許可を求めます。


1

私の最後にUINavigationControllerDelegate代理人がいません。

class YourViewController:UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate


0

私は同じ問題に出くわしました。上記の提案のどれも私にとってうまくいきませんでした。しかし、picker.dismissを呼び出してdismissし、その投稿をdismissすることで解決しました。なぜ私がそのような解任の電話をかけたのかははっきりしませんが、それは私にとってはうまくいきました。

   @objc func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {

        print("Image picked")
        picker.dismiss(animated: true, completion: nil)
        dismiss(animated: true) {
            print("dismissed")
             self.delegate?.presentEditor(img: (info[UIImagePickerControllerOriginalImage] as? UIImage)!, id: self.id!)
    }

}

0

私はこれらすべての答えを読み、ここで少し変更し、却下する必要はありませんでした。これは私にとってうまくいきました。ここで返信してくれた他の人に感謝します。

    @objc func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {

      print("########### media picked")
      picker.dismiss(animated: true, completion: nil)
      let img = (info[UIImagePickerControllerOriginalImage] as? UIImage)!
      //set img -picked image to "profileImage" UIimageView
      //use image here
       self.profileImage.image = img
       }
    }

0

IMage PickerView .....の解決策を見つけました

@IBOutlet weak var myImageView: UIImageView!

var imagePicker = UIImagePickerController()


  @IBAction func selectImage(_ sender: Any) {

        let myPickerController = UIImagePickerController()
        myPickerController.delegate = self;
        myPickerController.sourceType = UIImagePickerControllerSourceType.photoLibrary

        self.present(myPickerController, animated: true, completion: nil)

    }

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
        print(info)

        var selectedImageFromPicker: UIImage?

        if let editedImage = info["UIImagePickerControllerEditedImage"] as? UIImage
        {
            selectedImageFromPicker = editedImage as! UIImage


        }else if let originalImage = info["UIImagePickerControllerOriginalImage"] as? UIImage{

            selectedImageFromPicker = originalImage as! UIImage


        }

        dismiss(animated: true, completion: nil)

        if var selectedImage = selectedImageFromPicker
        {
            myImageView.image = selectedImage
        }

    }

    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
        picker.dismiss(animated: true, completion: nil)
    }

0

imageViewをクリックして写真ライブラリから画像をロードし、同じimageviewにプレビューを表示します。迅速に4

 let imagePicker = UIImagePickerController()
        @IBOutlet weak var userImage: UIImageView! 

     override func viewDidLoad() {
                super.viewDidLoad()
                 imagePicker.delegate = self
                let tap = UITapGestureRecognizer(target: self, action: #selector(SignUpViewController.click))
                userImage.addGestureRecognizer(tap)
                userImage.isUserInteractionEnabled = true
            }

            @objc func click()
            {
                imagePicker.allowsEditing = false
                imagePicker.sourceType = .photoLibrary
                present(imagePicker, animated: true, completion: nil)
            }


            @objc func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
                if  let chosenImage = info[UIImagePickerControllerOriginalImage] as? UIImage{
                userImage.contentMode = .scaleAspectFit
                userImage.image = chosenImage
                }
                dismiss(animated: true, completion: nil)
            }

            func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
                dismiss(animated: true, completion: nil)
            }

0

Swift 4.2Xcode 10.0でも同じ問題がありました。画像ピッカーは正常に機能していましたが、Xcodeはこのエラーをコンソールに表示しました。これを取り除くには:

  • Xcodeメニューの[Product]> [Scheme]> [Edit Scheme]
  • 「実行」タブを選択し、次に「引数」
  • 「環境変数」セクションで、名前がOS_ACTIVITY_MODEで値が無効の変数を追加します

まあ...実際には...私にはこのエラーが表示されますが、didFinishPickingMediaWithInfoメソッドは呼び出されません...そのため、このエラーを表示するにはこの値を有効にする必要がありました
Mohamed Lee
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.