SKView gestureRecognizer [UITapRecognizer name]:发送到实例的无法识别的选择器

时间:2014-11-05 23:20:15

标签: ios objective-c sprite-kit uigesturerecognizer skview

-(void)didMoveToView:(SKView *)view
{
    UITapGestureRecognizer* doubleTapGestureRecognizer = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(doubleTap:)];
    doubleTapGestureRecognizer.numberOfTapsRequired = 2;
    [self.view addGestureRecognizer:doubleTapGestureRecognizer];
}
-(void)doubleTap:(id)sender
{
    NSLog(@"double tap");
}

我正在使用它为我的SKView添加手势识别器。它工作正常,当我双击时双击,但当我触摸屏幕并移动我的手指时,应用程序崩溃时出现此错误:

[UITapRecognizer name]: unrecognized selector sent to instance 0x1756c600

为什么会这样?我没有打电话给任何"名字"这个识别器上的选择器。

我有这个方法:

#pragma mark - SKPhysicsContactDelegate

-(void)didBeginContact:(SKPhysicsContact *)contact
{
    if(![contact.bodyA.node.name isEqualToString:@"player"])
    {
        [contact.bodyA.node performSelector:@selector(removeFromParent) withObject:nil afterDelay:1];
    }
    if(![contact.bodyB.node.name isEqualToString:@"player"])
    {
        [contact.bodyB.node performSelector:@selector(removeFromParent) withObject:nil afterDelay:1];
    }

}

我注意到如果我对此进行评论,则没有这样的错误,但之后我将其替换为:

-(void)didBeginContact:(SKPhysicsContact *)contact
{
    if(![contact.bodyA.node respondsToSelector:@selector(name)])
    {
        NSLog(@"%@ , %@ \n",contact.bodyA, contact.bodyA.node);
    }
    if(![contact.bodyB.node respondsToSelector:@selector(name)])
    {
        NSLog(@"%@ , %@",contact.bodyB, contact.bodyB.node);
    }
}

并且调试日志中没有任何内容,只是相同的错误。发生了什么事?

1 个答案:

答案 0 :(得分:1)

原来是 - >的副本UITapGestureRecognizer causes app to crash

“我在我的一个SpriteKit游戏中遇到了同样的问题,它是在场景转换过程中使用手势时引起的,我通过在转换之前将gestureRecognizer.enable属性(文档)设置为NO来解决它。” 答案有帮助