質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

968閲覧

【Swift】DKImagePickerControllerにて複数画像を選択した際にunrecognized selectorエラーが発生する

yamaji1108

総合スコア19

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2020/06/01 04:09

前提・実現したいこと

一昨日、投稿させていただいた者です。
https://teratail.com/questions/266146?whotofollow=

現在カメラアプリのコラージュ機能を作成中です。ライブラリから複数画像を取得するため、ELCImagePickerControllerを使おうとしましたが、情報が古かったため代わりにDKImagePickerControllerを使うことにしました。

下記のサイトを主に参考にし実装したところ、複数画面を選択するところまでは動作しました。
https://qiita.com/dkazu6393/items/4374b5f46d965f4decd9

イメージ説明

しかし上の画面でボタンを押下すると、アプリがクラッシュしてしまいます。

イメージ説明

発生している問題・エラーメッセージ

2020-06-01 11:06:05.009751+0900 PortraitCamera[1303:220600] -[PortraitCamera.CustomUIDelegate done]: unrecognized selector sent to instance 0x281ddd8c0 2020-06-01 11:06:05.010857+0900 PortraitCamera[1303:220600] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[PortraitCamera.CustomUIDelegate done]: unrecognized selector sent to instance 0x281ddd8c0' *** First throw call stack: (0x1f37b7180 0x1f298f9f8 0x1f36d39bc 0x1f37bc9c8 0x1f37be65c 0x21ffa6300 0x21fa4f424 0x21fa4f744 0x21fa4e7b0 0x21ffdd5c4 0x21ffde7ec 0x21ffbe85c 0x2200849d4 0x220087100 0x220080330 0x1f3748f1c 0x1f3748e9c 0x1f3748784 0x1f37436c0 0x1f3742fb4 0x1f594479c 0x21ffa4c38 0x100ab8178 0x1f32068e0) libc++abi.dylib: terminating with uncaught exception of type NSException

該当のソースコード(ViewController.swift)

swift

1// 2// ViewController.swift 3// 4 5import UIKit 6import CropViewController 7import AVFoundation 8import DKImagePickerController 9 10class ViewController: UIViewController, UINavigationControllerDelegate { 11 //略 12 13 //base 14 @IBOutlet weak var imageSizeLabel: UILabel! 15 @IBOutlet weak var baseView: UIView! 16 @IBOutlet weak var sourceImageView: UIImageView! 17 @IBOutlet weak var cropImageView: UIImageView! 18 @IBOutlet weak var processSegment: UISegmentedControl! 19 20 override func viewDidLoad() { 21 super.viewDidLoad() 22 //略 23 } 24 25 26 27 28 29extension ViewController { 30 31 //略 32 33 //コラージュボタンを押下したときの処理 34 @IBAction func collageButtonDidtap(sender: AnyObject) { 35 self.pickImages() 36 } 37 38 // 写真を選択する 39 func pickImages() { 40 let picker = DKImagePickerController() 41 //選択できる写真の最大数を指定 42 picker.maxSelectableCount = 4 43 //カメラモード、写真モードの選択 44 picker.sourceType = .photo 45 //キャンセルボタンの有効化 46 picker.showsCancelButton = true 47 //UIのカスタマイズ(CustomUIDelegateクラスを使う) 48 picker.UIDelegate = CustomUIDelegate() 49 50 //追加した文 51 picker.didSelectAssets = { (assets: [DKAsset]) in 52 for asset in assets { 53 asset.fetchFullScreenImage(completeBlock: { (image, info) in 54 print(image) 55 }) 56 } 57 } 58 59 //追加した文 60 self.present(picker, animated: true, completion: nil) 61 } 62 63 //略 64 65} 66 67 68//略 69 70} 71

該当のソースコード(CustomUIDelegate.swift)

swift

1// 2// CustomUIDelegate.swift 3// 4// 5// Created by 山田拓也 on 2020/05/31. 6// 7 8import Foundation 9import DKImagePickerController 10 11class CustomUIDelegate: DKImagePickerControllerBaseUIDelegate { 12 override func createDoneButtonIfNeeded() -> UIButton { 13 let button = UIButton(type: UIButton.ButtonType.custom) 14 button.setTitle("選択", for: .normal) 15 button.setTitleColor(UINavigationBar.appearance().tintColor ?? self.imagePickerController.navigationBar.tintColor, for: .normal) 16 button.addTarget(self, action: #selector(DKImagePickerController.done), for: .touchUpInside) 17 return button 18 } 19 20 //写真選択超過時のアラートのカスタマイズ 21 override func imagePickerControllerDidReachMaxLimit(_ imagePickerController: DKImagePickerController) { 22 let alert = UIAlertController.init(title: "注意", message: "これ以上選択できません!", preferredStyle: .alert) 23 let okAction = UIAlertAction(title: "OK", style: UIAlertAction.Style.cancel, handler: nil) 24 alert.addAction(okAction) 25 imagePickerController.present(alert, animated: true, completion: nil) 26 } 27 28 //cancelボタンのカスタマイズ 29 override func imagePickerController(_ imagePickerController: DKImagePickerController, showsCancelButtonForVC vc: UIViewController) { 30 let cancelButton = UIBarButtonItem() 31 cancelButton.title = "戻る" 32 cancelButton.style = .plain 33 cancelButton.action = #selector(imagePickerController.dismiss as () -> Void) 34 cancelButton.target = imagePickerController 35 vc.navigationItem.leftBarButtonItem = cancelButton 36 } 37} 38

エラー文を見ると、CustomUIDelegate.swiftの16行目

button.addTarget(self, action: #selector(DKImagePickerController.done), for: .touchUpInside)

のdoneメソッドの処理時にエラーが発生していることが特定できたのですが、具体的にどの部分をまずく、どのように修正すれば良いかが分かりません。
どうか、ご教示をよろしくお願いします。

補足情報(FW/ツールのバージョンなど)

Xcode Version 11.4.1
Swift Version 5.0.1
iOS 12.4.7

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

DKImagePickerController のサンプルプログラム等と照らし合わせると、引数として与えるインスタンス名が間違っているみたいです(おそらく、参照されたサンプルが間違っている可能性が高いです)。

Swift

1 button.addTarget(self.imagePickerController, action: #selector(DKImagePickerController.done), for: .touchUpInside)

投稿2020/06/01 06:37

TsukubaDepot

総合スコア5086

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yamaji1108

2020/06/01 07:16

TsukubaDepot様 引き続き、ありがとうございます! ご指摘いただいた通り、インスタンス名を修正したところ、画像を取得することができました! デバックエリア Optional(<UIImage: 0x280188070>, {750, 750}) Optional(<UIImage: 0x2801889a0>, {750, 750}) Optional(<UIImage: 0x28018e140>, {750, 750}) Optional(<UIImage: 0x28018e530>, {750, 750}) これで進むことができます。 自分でも引数の意味を考えて実行するよう心がけます。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問