UIImageView에서 사진 라이브러리의 이미지를 표시하려고합니다.
전체 오류는 다음과 같습니다.
2017-06-09 21 : 55 : 59.063307 + 0200 firstapp2.0 [12873 : 1120778] PhotoPicker 검색 오류 : 오류 도메인 = PlugInKit Code = 13 “query cancelled”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)
}
}
답변
명시적인 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)
}
답변
이 해결책을 찾았습니다. 아래에 언급 된 두 가지 이유 때문에이 오류가 발생했습니다.
- 먼저 인증을 위해이 메서드를 호출해야합니다.
인증 코드
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.")
}
}
- 올바른 방법 호출 방법
didFinishPickingMediaWithInfo
잘못된:
private func imagePickerController( picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
}
권리
@objc func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
}
이 솔루션이이 오류를 해결하는 데 도움이되기를 바랍니다.
그것이 당신을 위해 작동한다면 그것이 올바른 것으로 표시하는 것을 잊지 마십시오. 그러면 다른 사람들이 올바른 방법을 찾는 데 도움이 될 것입니다.
답변
찾았어요! “사진”에 대한 권한이 없다는 것을 알리려는 것입니다.#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에서 동일한 작업을 수행하는 방법을 알려줄 수 있습니다.
답변
많은 성공없이 몇 가지 조합 응답을 시도했습니다.
Swift 4를 사용하여 이미지가 선택되고 선택기에 배치되었는지 확인하기 위해 다음 두 항목이 구현되었는지 확인해야한다는 것을 알았습니다 (확장 프로그램을 검색하는 동안 “[검색] 오류가 발생했습니다.
오류 도메인 = PlugInKit Code = 13 “query cancelled”UserInfo = {NSLocalizedDescription = query cancelled} “
메시지가 여전히 콘솔에 표시되지만 이미지 추가를 방해하지는 않습니다.) 선택기가 해제되는 메시지일까요?
1)에 대한 대리자 UIImagePickerController
입니다 (UIImagePickerControllerDelegate & UINavigationControllerDelegate)?
필요가 명시 적으로 추가 할 수 있도록 UINavigationControllerDelegate
프로토콜 중 하나로 :
class ViewController:UIViewController, UIImagePickerControllerDelegate,
UINavigationControllerDelegate { .... }.
2) info.plist에 Privacy - Photo library Usage Description
키와 문자열 값이 설정되어 있는지 확인하십시오 .
물론 UIImagePickerController
델리게이트 를 생성하고 self
in 과 동일하게 설정 해야합니다 ViewDidLoad()
.
class ViewController:UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
let imagePickerController = UIImagePickerController()
override func viewDidLoad() {
super.viewDidLoad()
imagePickerController.delegate = self
}
...
}
답변
이 문제를 해결하고 아래 함수를 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
하려면 클래스 상단에 추가하는 것을 잊지 마십시오 .
답변
XCODE 10.1 / SWIFT 4.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) }
답변
* Missing DELEGATE * in Swift 3
제 경우에는 모든 설정이 정확했습니다.
1-Delegates (UIImagePickerControllerDelegate, UINavigationControllerDelegate);
2-권한이 이미 확인되었습니다.
3-Plist가 이미 완료되었습니다.
4-이 답변에 대한 모든 내용을 읽었습니다.
하지만 구현 pickerview.delegate = self
하는 것을 잊었습니다 .viewDidLoad
다른 viewController에서 복사 및 붙여 넣기 때문에 .
누군가에게 도움이되기를 바랍니다. 먼저 COPY / PASTE를 검토하십시오 !!!