web-dev-qa-db-fra.com

Swift 3: Sélecteur non reconnu envoyé à l'instance Xcode 8

J'ai créé par programme un UIView et y ai ajouté UIPanGestureRecognizer:

class ViewController: UIViewController{
    var preludeView: UIView!

    override func viewDidLoad() {
        super.viewDidLoad()

        initViews()
        createConstrants()

        let panGestureRecognizer = UIPanGestureRecognizer(target: self, action: Selector(("handleTap:")))
        preludeView.addGestureRecognizer(panGestureRecognizer)
    }

    func handleTap(recognizer: UIPanGestureRecognizer) {
        print("WORKING!!!!")
    }

    func initViews() {
        ...
    }

    func createConstrants() {
        ...
    }
}

Mais quand je touche la vue, Xcode lance une erreur:

2016-07-13 09: 24: 29.918 Draft_Hypa_02 [661: 83024] - [Draft_Hypa_02.ViewController handleTap:]: sélecteur non reconnu envoyé à l'instance 0x17d94a10 2016-07-13 09: 24: 29.921 Draft_Hypa_02 [661: 83024] * Fin de l'application en raison d'une exception non interceptée 'NSInvalidArgumentException', raison: '- [Draft_Hypa_02.ViewController handleTap:]: sélecteur non reconnu envoyé à l'instance 0x17d94a10' * Pile de premier appel: (0x249cf91b 0x2416ae17 0x249d52b5 0x249f2 0x4a98 0x2 0x28f3ba57 0x28f38017 0x28f78ec9 0x28f7867b 0x28f49125 0x28f476d3 0x24991dff 0x249919ed 0x2498fd5b 0x248df229 0x248df015 0x25ecfac9 0x28fb1189 0x93144 0x2458587873) type d'exception libc ++ abi.dylib: erreur d'exception libc ++:

Cependant, si je supprime l'argument dans la fonction handleTap et que je supprime les deux-points dans la Selector(("handleTap:")), tout fonctionne bien!

J'ai déjà passé une journée à essayer de résoudre ce problème et je vous serais très reconnaissant de votre aide!

12
Raul

Si vous utilisez Swift 3 votre selector devrait être comme ceci

#selector(self.handleTap(recognizer:))
30
Nirav D

Vous devez écrire cette déclaration de manière différente. utiliser la ligne suivante

laissez panGestureRecognizer = UIPanGestureRecognizer (cible: auto, action: #selector (ViewController.handleTap (_ :)))

au lieu de

laissez panGestureRecognizer = UIPanGestureRecognizer (cible: self, action: Selector (("handleTap:"))))

Nouvelle façon

laissez panGestureRecognizer = UIPanGestureRecognizer (cible: self, action: #selector (YourViewController.handleTap (_ :)))

6
Mahendra Y
class ViewController: UIViewController {

    let customView = UIView()

    override func viewDidLoad() {
        super.viewDidLoad()

        let panGestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(handleTap(_:)))
        customView.addGestureRecognizer(panGestureRecognizer)
    }

    func handleTap(panGesture: UIPanGestureRecognizer) {

    }
}

N'oubliez pas d'ajouter votre UIView personnalisé au VC.

2
Diogo Antunes