Ios 界面生成器目标/操作中的UIgestureRecognitor

Ios 界面生成器目标/操作中的UIgestureRecognitor,ios,interface-builder,target,gesture,long-press,Ios,Interface Builder,Target,Gesture,Long Press,我正在为iPhone应用程序设置UIgestureRecognitor。 我在InterfaceBuilder中通过将长按手势识别器从对象库拖动到必须接受手势的视图来完成此操作 在我以这种方式添加手势识别器之后,它具有指向应该接受手势的视图的引用集合 然后在ViewController中,我添加了一个指向手势识别器的IBOutlet IBOutlet UILongPressGestureRecognizer *gestRec; -(IBAction)longPress:(id)sender;

我正在为iPhone应用程序设置UIgestureRecognitor。 我在InterfaceBuilder中通过将长按手势识别器从对象库拖动到必须接受手势的视图来完成此操作

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

然后在ViewController中,我添加了一个指向手势识别器的IBOutlet

IBOutlet UILongPressGestureRecognizer *gestRec;
-(IBAction)longPress:(id)sender;
以及手势识别器的相应操作

IBOutlet UILongPressGestureRecognizer *gestRec;
-(IBAction)longPress:(id)sender;
因此,在它完成后,手势识别器在Interface builder中显示插座和名为longPress:的操作,目标名为ControlManager

但当我在iPhoneSimulator中做长按手势时,我的程序崩溃了。当我记录我的手势识别器的描述时,它显示以下输出:

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

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

target=<ControlManager 0x6859af0>; 
action=longPress:
target=;
动作=长按:
我做错什么了吗?

您是否在.m中实现了-(void)longPress:(UIGestureRecognizer)recognizer?(我建议更新id->UIGestureRecognizer和sender->recognizer;iAction的typedef为void,但您可以将其显式化)

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

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

祝你好运


Damien

您是否在ControlManager中实现longPress:?你能把撞车日志寄出去吗?是的,我能。崩溃日志如下:-[\uu NSCFString longPress:]:无法识别的选择器发送到实例0x686A8D0可能您在代码中添加了另一个目标,即字符串。这可以解释错误消息和崩溃。手势识别器描述看起来不错。请注意,手势识别器可以有多个目标/动作。我删除了所有视图和视图控制器,保留了一个视图和一个控制器,使其正常工作。所以现在我只需要找出特定视图和视图控制器崩溃时的问题所在。我按照您所说的进行了修复,但仍然无法工作。如果我将iAction更改为void,这个操作在InterfaceBuilder中将不可用,对吗?我犯了一个错误。InterfaceBuilder中的目标名称不是ViewController,而是识别器描述中的ControlManager,但它是UIViewController的一个实例。