我在Xcode的长按手势识别器中遇到问题,同时将其应用于录制音频的按钮
let longPress = UILongPressGestureRecognizer(target: self, action: "startRecording:")
longPress.minimumPressDuration=0
view.addGestureRecognizer(longPress)
blabButtonPressed.addGestureRecognizer(longPress)
func startRecording(press:UILongPressGestureRecognizer){
if press.state == .began{
recorder.record(forDuration: 8)
}
else if press.state == .ended{
recorder.pause()
}
}
它给了我
无法识别的选择器发送到实例0x100d0a790 2017-06-16 23:49:43.990785 + 0530 blabby [451:102183] ***因未捕获的异常'NSInvalidArgumentException'终止应用
在我运行
时单击手机上的那个按钮答案 0 :(得分:0)
在action
参数中,您应该传递一个表示您要调用的方法的选择器。在Swift 3之前,您可以使用Selector("someMethod")
语法执行此操作。使用此语法的缺点是您必须知道在Objective-C中调用Swift方法的内容,并且编译器不会检查您是否获得了正确的名称。这个方法是Swift:
func startRecording(press:UILongPressGestureRecognizer){
某些在Objective-C中未被称为startRecording:
。它可以被桥接为startRecordingWithPress:
或类似的东西(我不是这个领域的专家)。
但不要担心!
Swift 3变得非常聪明,你不再需要通过字符串传递选择器了!现在,您使用#selector(identifier)
语法。这次,编译器将为您检查有效性!您只需要编写方法名称仅,即startRecording
。
let longPress = UILongPressGestureRecognizer(
target: self, action: #selector(startRecording))
只有当你有不同的方法重载时,你才需要关心参数。