尝试使用点击手势识别器时出现无法识别的选择器错误

Unrecognized selector error trying to use a tap gesture recognizer

我正在尝试为我的应用程序创建一个注册页面。但是当我 运行 应用程序时出现错误。

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFBoolean select:]: unrecognized selector sent to instance 0x10ad5a690'

我的代码有什么问题,这意味着什么?

这是我的代码:

import UIKit

class SignupViewController: UIViewController {

    @IBOutlet weak var profileImage: UIImageView!
    @IBOutlet weak var usernameTextField: UITextField!
    @IBOutlet weak var emailTextField: UITextField!
    @IBOutlet weak var passwordTextField: UITextField!

    let imagePicker = UIImagePickerController()
    var selectedPhoto: UIImage!

    override func viewDidLoad() {
        super.viewDidLoad()


        let tap = UITapGestureRecognizer(target: true, action: #selector(SignupViewController.select(_:)))
           tap.numberOfTapsRequired = 1
        profileImage.addGestureRecognizer(tap)
    }

    func selectPhoto(tap:UITapGestureRecognizer) {
        self.imagePicker.delegate = self
        self.imagePicker.allowsEditing = true
        if UIImagePickerController.isSourceTypeAvailable(.camera) {
            self.imagePicker.sourceType = .camera
        }else{
            self.imagePicker.sourceType = .photoLibrary
        }
        self.present(imagePicker, animated: true, completion: nil)
    }

    @IBAction func CancelDidTapped(_ sender: AnyObject) {
        dismiss(animated: true, completion: nil) 
    }

    @IBAction func RegisterDidTapped(_ sender: AnyObject) {
    }
}

extension SignupViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate{

    //ImagePicker

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
        selectedPhoto = info[UIImagePickerControllerEditedImage] as? UIImage
        self.profileImage.image = selectedPhoto
        picker.dismiss(animated: true, completion: nil)
    }

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

该错误表明您在 boolean:

上错误地调用了 select(_:) 函数
 '-[__NSCFBoolean select:]: unrecognized selector sent to instance 0x10ad5a690'

在检查代码以了解调用 select(_:) 的位置和方式后,很明显问题在于您将 UITapGestureRecognizer 的目标设置为布尔值,即true:

let tap = UITapGestureRecognizer(target: true, action: #selector(SignupViewController.select(_:)))

何时应将其设置为函数的视图控制器。例如,在这种情况下,您可能希望将目标设置为 self:

let tap = UITapGestureRecognizer(target: self, action: #selector(SignupViewController.select(_:)))

至于您正在调用的 select(_:) 方法,在我看来您打错了字,您打算调用您创建的 selectPhoto(tap:) 方法;在这种情况下,您的点击手势声明和初始化应该改为:

let tap = UITapGestureRecognizer(target: self, 
                           action: #selector(SignupViewController.selectPhoto(tap:)))