首页 > 解决方案 > 无法识别的选择器发送到实例 - XCode 9.4.1,Swift 4.0

问题描述

我正在学习 2016 年的斯坦福 Swift 课程 iOS9,并且在复制 UIPinchGestureRecognizer 时遇到了问题,对 Selector 代码语法感到非常困惑。

FaceViewConroller.Swift 中的 FaceViewController 类内部:

@IBOutlet weak var faceView: FaceView! {
    didSet {
        faceView.addGestureRecognizer(UIPinchGestureRecognizer(target: self, action: #selector(changeScale(_:))))
        updateUI()
    }
}

FaceView.Swift 中 Faceview 的内部类定义:

@objc
func changeScale(_ recognizer: UIPinchGestureRecognizer) {
    switch recognizer.state {
    case .changed,.ended:
        scale *= recognizer.scale
        recognizer.scale = 1.0
    default:
        break
    }
}

它构建时没有错误(需要一段时间),但是当它运行捏合手势时会导致错误:

Faceit.FaceViewController changeScale:]: 无法识别的选择器发送到实例

谢谢。

标签: swiftxcode9.4

解决方案


您传递了错误的target参数。

由于您要调用的方法 ( changeScale) 是在 中声明的FaceView,因此目标应该是 的实例FaceView,而不是FaceViewController,因为FaceViewController没有changeScale方法。

所以:

faceView.addGestureRecognizer(UIPinchGestureRecognizer(target: faceView, action: #selector(changeScale(_:))))

推荐阅读