【问题标题】:UIGestureRecognizer in InterfaceBuilder target/actionInterfaceBuilder 目标/动作中的 UIGestureRecognizer
【发布时间】:2012-03-18 03:29:10
【问题描述】:

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

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

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

IBOutlet UILongPressGestureRecognizer *gestRec;

手势识别器的相应操作

-(IBAction)longPress:(id)sender;

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

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

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

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

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

我做错了吗?

【问题讨论】:

  • 您在 ControlManager 中实施 longPress: 吗?你能发布崩溃日志吗?
  • 是的,我愿意。崩溃日志如下: -[__NSCFString longPress:]: unrecognized selector sent to instance 0x686a8d0
  • 也许你在代码中添加了另一个目标,一个字符串。这将解释错误消息和崩溃。手势识别器描述看起来不错。请注意,手势识别器可以有多个目标/动作。
  • 我通过删除所有视图和视图控制器并留下一个视图和一个控制器使其正常工作。所以现在我只需要找出崩溃时特定视图和视图控制器出了什么问题。

标签: ios interface-builder target gesture long-press


【解决方案1】:

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

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

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

祝你好运,

达米安

【讨论】:

  • 我按照你说的修好了,但还是不行。而且如果我把 IBAction 改成 void,这个 action 在 InterfaceBuilder 中就不能用了,对吧?
  • 我犯了一个错误。 InterfaceBuilder 中的目标名称不是 ViewController 而是 ControlManager,如识别器描述 - 但它是 UIViewController 的一个实例。
猜你喜欢
  • 1970-01-01
  • 2011-05-07
  • 2013-12-02
  • 1970-01-01
  • 1970-01-01
  • 2011-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多