2016-10-23 3 views
-1

Я пытаюсь создать страницу регистрации для своего приложения. Но я получаю сообщение об ошибке при запуске приложения.Непризнанная ошибка селектора, пытающаяся использовать распознаватель жестов нажатия

Нагрузочный приложение из-за неперехваченного исключением 'NSInvalidArgumentException', причина: '- [__ NSCFBoolean выбрать]: непризнанные селектор направлен например 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) 
    } 
} 

ответ

1

Ошибка указывает на то, что вы неправильно звонит select(_:) функцию на boolean:

'-[__NSCFBoolean select:]: unrecognized selector sent to instance 0x10ad5a690' 

После изучения кода, чтобы увидеть, где и как ты 've вызвал 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:))) 
+0

Но когда я пишу selectPhoto так я получаю ошибку, (тип SignupViewController не члена «selectPhoto»). Я использую Xcode 8 и Swift 3 –

+0

Хорошо, я исправил это, чтобы просто написать «tap» вместо «_». –

+0

Спасибо за ваш комментарий. –