に似ている
PhotoPicker検出エラー:エラードメイン= PlugInKitコード= 1
そしてまた
https://forums.developer.Apple.com/thread/82105
しかし、これらの提案をすべて試しても、デバッグログにエラーが記録されます。実行中Swift 4 XCode 9A235
さまざまな場所で提案されたのは...
DID Swift 3-以前のxcodeでこの問題が発生しません。しかし、Swift 4では、提案されたすべてのことを試してみましたが、まだ次のエラーが表示されます
[ディスカバリ]拡張機能の検出中にエラーが発生しました:Error Domain = PlugInKit Code = 13 "query cancelled" UserInfo = {NSLocalizedDescription = query cancelled}
ピッカーは正常に動作し、写真から画像を選択することになりますが、ピッカーを終了するたびにこのエラーメッセージが表示されます(キャンセルまたは選択)。
エラーメッセージを止める方法はありますか?他の2つのリンクで提供されているもののリスト以外(上記に要約)
私の方法
@objc internal func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
imageSelected = nil
if let editedImage = info["UIImagePickerControllerEditedImage"] as? UIImage {
imageSelected = editedImage
} else if let originalImage = info["UIImagePickerControllerOriginalImage"] as? UIImage {
imageSelected = originalImage
}
if imageSelected != nil {
handleSelectedImage() // override in subclass to do something with the returned image
}
picker.dismiss(animated: true, completion: nil) // mess of calling both dismiss to see if it helps - it does not
dismiss(animated: true, completion: nil)
}
mc-system-group-container-and-mc-reading-from-public-effective-user-settings-err を参照してください
仕事は大丈夫
それが私のコードの下に役立つ場合(xcode 9で動作する)
if libraryAuthorization == .authorized {
let imagePicker = UIImagePickerController()
imagePicker.delegate = self
imagePicker.sourceType = UIImagePickerControllerSourceType.photoLibrary
imagePicker.allowsEditing = false
imagePicker.view.tag = button.tag
self.present(imagePicker, animated: true, completion: nil)
}
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
if let pickerImage = info[UIImagePickerControllerOriginalImage] as? UIImage {
photoContainer.addImageToButton(pickerImage, buttonTag: picker.view.tag)
dismiss(animated: true)
}
}
Swift 4:
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
guard let pickedImage = info[UIImagePickerController.InfoKey.originalImage] as? UIImage else {
return
}
...
}
[String: Any]
から[UIImagePickerController.InfoKey : Any]
info["UIImagePickerControllerOriginalImage"]
からinfo[UIImagePickerController.InfoKey.originalImage]
私は同じ問題を抱えていて、見つけることができるすべての解決策を試しましたが、何も助けませんでした。デリゲートがトリガーされない場合、デリゲートに何が起こるかを自問してみました:デリゲートの割り当て解除!
それが私の場合です! UIImagePickerControllerを提示するとき、提示するView Controllerではないclass ImagePickerController : NSObject, UIImagePickerControllerDelegate, UINavigationControllerDelegate
の私のインスタンスは直接割り当て解除されます。もちろん、デリゲート関数はもう実行できません。
deinit
(またはObjective-Cの世界ではdealloc
)にブレークポイントを置くだけで、デリゲートが割り当て解除されているかどうかを確認できます。
ユーザーは次のように尋ねます。「*エラーメッセージを停止する方法はありますか?他の2つのリンクで提供されているもののリスト(上記に要約)以外」。
エラーメッセージを排除するために2つの手順を使用しました。アントワーヌ・リシューの上にいる人への称賛 https://stackoverflow.com/users/5767821/antoine-richeux 。
少なくとも私の場合、プライバシーをpListに追加する必要はないと思う
STEP 1。メニューバーから:製品>スキーム>スキームの編集>ビルド、実行...の左側のリストから実行を選択します。右側の上部の選択セットから選択引数をアーカイブします。添付の図を参照してください。環境変数の下の+ボタンを使用して、新しいエントリを追加します名前:OS_ACTIVITY_MODE値:無効
STEP 2。プロジェクトをクリーンアップして再構築
試していただけますか?
extension YourProfileViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate {
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
dismiss(animated: true, completion: nil)
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
log.debug("Called imagePickerController function ")
let image = info[UIImagePickerControllerOriginalImage] as? UIImage
self.dismiss(animated: true) {
self.yourProfileImageView.image = image
}
}
}
アプリがユーザーの許可を求めずに写真ライブラリを使用しているためです(この場合、UIImagePickerController
を使用)。例として、追加ボタンがタップされたときに画像ピッカーを表示したい場合:
@IBAction func addButtonTapped(_ sender: UIBarButtonItem) {
checkPermission {
let picker = UIImagePickerController()
picker.sourceType = .photoLibrary
picker.mediaTypes = UIImagePickerController.availableMediaTypes(for: .photoLibrary)!
picker.delegate = self
picker.allowsEditing = false
self.present(picker, animated: true, completion: nil)
}
}
func checkPermission(hanler: @escaping () -> Void) {
let photoAuthorizationStatus = PHPhotoLibrary.authorizationStatus()
switch photoAuthorizationStatus {
case .authorized:
// Access is already granted by user
hanler()
case .notDetermined:
PHPhotoLibrary.requestAuthorization { (newStatus) in
if newStatus == PHAuthorizationStatus.authorized {
// Access is granted by user
hanler()
}
}
default:
print("Error: no access to photo album.")
}
}
さらに、これもplistに追加する必要があります。
<key>NSPhotoLibraryUsageDescription</key>
<string>So that you can add images for your cloth. </string>
これは、許可ダイアログに表示されるメッセージです。
私もこの問題を抱えていました。コンソールエラーが表示されますが、アプリはまだ画像をロードしているため、非常に迷惑です。認証ステータスをリクエストし、キーを.plstに追加しましたが、ジョブを実行するためのこれらのどれも見つかりませんでした。
Product-> Scheme-> Edit Scheme-> Runに行ったら、キーを追加: "OS_ACTIVITY_MODE" value: "disable"、clean再構築しました...エラーはなくなりました。
var messageImage = UIImage()
@objc func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
self.dismiss(animated: true, completion: { () -> Void in
})
if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage
{
messageImage = image
}
print("Image Captured")
}
フェッチする必要がありますUIImagePickerController.InfoKey.originalImage
not UIImagePickerController.InfoKey.editedImage
Swift 4.2とXcode 10.でこれと同じ問題がありました。画像ピッカーは正常に動作していましたが、Xcodeはコンソールにこのエラーを表示しました。これを取り除くには:
クラスがUINavigationControllerDelegate
を実装することを必ず宣言してください。
extension MyViewController: UINavigationControllerDelegate {}
Xcode 9.0の何らかの理由で、デリゲートをそのように宣言するよう警告されました。
imagePicker.delegate = self as? UIImagePickerControllerDelegate & UINavigationControllerDelegate