0

我正在为 iPhone 应用程序设置 UIGestureRecognizer。我在 InterfaceBuilder 中通过将 Long Press Gesture Recognizer 从 Objects 库拖动到必须接受手势的视图来执行此操作。

在我以这种方式添加手势识别器后,它具有指向应该接受手势的视图的引用插座集合。

然后在 ViewController 我添加一个指向 GestureRecognizer 的 IBOutlet

IBOutlet UILongPressGestureRecognizer *gestRec;

以及手势识别器的相应动作

-(IBAction)longPress:(id)sender;

因此,手势识别器在界面生成器中显示出口和名为longPress:的操作之后,目标名为ControlManager

但是当我在 iPhoneSimulator 中做出长按手势时,我的程序崩溃了。当我 NSlog 我的 GestureRecognizer 的描述时,它显示以下输出:

<UILongPressGestureRecognizer: 0x6859620; 
state = Possible; 
view = <UIView 0x6859e20>; 
target= <(action=longPress:, target=<ControlManager 0x6859af0>)>>

我认为这个问题在最后一行,它应该是这样的:

target=<ControlManager 0x6859af0>; 
action=longPress:

难道我做错了什么?

4

1 回答 1

1

您是否在 .m 中实现了 -(void)longPress:(UIGestureRecognizer)recognizer?(我建议更新 id -> UIGestureRecognizer 和发件人 -> 识别器;IBAction 的 typedef 是无效的,但您可以明确说明)

你肯定想实现选择器,当方法(如果实现的话)与选择器不匹配时,这种类型的崩溃很常见。即使缺少冒号也可能导致不匹配。

另外,您是否将调试器设置为在引发异常时中断?如果没有,请转到调试器(左窗格左起第 6 个“选项卡”),单击 + 添加一个新选项,“添加异常断点”,并保持默认值)。一旦引发异常,这会将您推入调试器,这通常是堆栈中的有用位置。

祝你好运,

达米安

于 2012-02-28T16:43:16.387 回答