尝试使用点击手势识别器时出现无法识别的选择器错误
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:)))
我正在尝试为我的应用程序创建一个注册页面。但是当我 运行 应用程序时出现错误。
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:)))