gestureRecognizer:shouldBeRequiredToFailByGestureRecognizer崩溃

时间:2014-03-11 12:11:36

标签: ios iphone uigesturerecognizer nszombie

我的视图控制器上有一个手势识别器,用于滑入/滑出导航栏。不幸的是,当我轻扫去前一个控制器时,有一个糟糕的NSZombie使整个应用程序崩溃。它很难跟踪,因为它只发生在特定的视图控制器中。

这是错误:

[MyViewController gestureRecognizer:shouldBeRequiredToFailByGestureRecognizer:]: message sent to deallocated instance 

这是我的代码:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    UIPanGestureRecognizer *pgr = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pgr:)];
    pgr.delegate = self;
    [self.view addGestureRecognizer:pgr];
}

- (void)pgr:(UIPanGestureRecognizer *)gesture {
    // Check if this is the first touch
    if (gesture.state == UIGestureRecognizerStateBegan) {
        CGPoint point = [gesture locationInView:gesture.view];
        self.start = point.y;
    }

    CGPoint point = [gesture locationInView:gesture.view];
    self.currentX = point.x;
    self.offsetY = point.y - self.start;
}

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    return YES;
}

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    if ([gestureRecognizer isKindOfClass:[UIScreenEdgePanGestureRecognizer class]]) {
        return YES;
    }

    return NO;
}

1 个答案:

答案 0 :(得分:1)

委托方法是

- (BOOL)shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer

尝试使用

- (BOOL)shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    if ([otherGestureRecognizer isKindOfClass:[UIScreenEdgePanGestureRecognizer class]]) {
        return YES;
    }

    return NO;
}