web-dev-qa-db-ja.com

Swift 3:インスタンスXcode 8に送信された認識されないセレクター

プログラムでUIViewを作成し、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() {
        ...
    }
}
_

しかし、ビューに触れると、Xcodeはエラーをスローしています。

2016-07-13 09:24:29.918 Draft_Hypa_02 [661:83024]-[Draft_Hypa_02.ViewController handleTap:]:インスタンス0x17d94a10に送信された認識されないセレクター2016-07-13 09:24:29.921 Draft_Hypa_02 [661:83024] *によりキャッチされない例外 'NSInvalidArgumentException'、理由にアプリを終了: ' - [Draft_Hypa_02.ViewController handleTap:]:認識されないセレクターインスタンス0x17d94a10に送ら' *まずスローコールスタック(0x249cf91b 0x2416ae17 0x249d52b5 0x249d2ee1 0x248fe238 0x294ae9eb 0x290e984f 0x28f7aff1 0x294afd4f 0x28f3ba57 0x28f38017 0x28f78ec9 0x28f7867b 0x28f49125 0x28f476d3 0x24991dff 0x249919ed 0x2498fd5b 0x248df229 0x248df015 0x25ecfac9 0x28fb1189 0x93144 0x245878dy)

ただし、handleTap関数の引数を削除し、Selector(("handleTap:"))のコロンを削除すると、すべて正常に動作します!

すでにこの問題を修正するために1日を費やしており、あなたの助けに感謝します!

12
Raul

Swift 3を使用している場合、selectorは次のようになります。

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

このステートメントは別の方法で記述する必要があります。次の行を使用

let panGestureRecognizer = UIPanGestureRecognizer(target:self、action:#selector(ViewController.handleTap(_ :)))

の代わりに

let panGestureRecognizer = UIPanGestureRecognizer(target:self、action:Selector(( "handleTap:")))

新しい方法

let panGestureRecognizer = UIPanGestureRecognizer(target: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) {

    }
}

カスタムUIViewをVCに追加することを忘れないでください。

2
Diogo Antunes