前提・実現したいこと
一昨日、投稿させていただいた者です。
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
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/01 07:16