【问题标题】:unrecognized selector sent to instance - XCode 9.4.1, Swift 4.0无法识别的选择器发送到实例 - XCode 9.4.1,Swift 4.0
【发布时间】:2018-08-08 02:23:12
【问题描述】:

我正在通过 Stanford Swift Course iOS9 from 2016 工作,并且在复制 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:]: 无法识别的选择器发送到实例

谢谢。

【问题讨论】:

    标签: swift xcode9.4


    【解决方案1】:

    你传递了错误的target参数。

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

    所以:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-24
      • 1970-01-01
      相关资源
      最近更新 更多