gestRecognizer должен ReceiveTouch, сохраняющийся в освобожденном представлении, вызывающем сбой

У меня довольно простой UITableView, который выдвигает новое представление в стеке. Новое представление имеет gestRecognizer, который инициализируется следующим образом

@synthesize swipeGestureLeft;


    - (void)viewDidLoad
{
        swipeGestureLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(toggleViewLeft)];
        swipeGestureLeft.numberOfTouchesRequired = 1;
        swipeGestureLeft.delegate=self;
        swipeGestureLeft.direction = (UISwipeGestureRecognizerDirectionLeft);
        [self.view addGestureRecognizer:swipeGestureLeft];
}

Я также вызываю метод делегата

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {

    if (viewShown==1) {
        return NO;
    }
    return YES;
}

и в методе dealloc у меня есть

- (void)dealloc {
    NSLog(@"I AM IN DEALLOC");


    swipeGestureLeft.delegate=nil;
    [self.view removeGestureRecognizer:swipeGestureLeft];
    swipeGestureLeft=nil;



}

в моем файле.h у меня есть

@interface MyViewController : UIViewController <UIGestureRecognizerDelegate>

теперь, когда я возвращаюсь назад, чтобы вернуться к моему табличному представлению, представление освобождается (что я вижу из-за срабатываний NSLog), теперь, когда я пытаюсь провести по моему табличному представлению, происходит сбой приложения:

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

Как убедиться, что метод делегата не вызывается после освобождения представления.

1 ответ

Решено: я использую новый iOS7 navigationController.interactivePopGestureRecognizer и установил для его делегата значение "self".

После освобождения я не смог установить его делегат на "ноль". Именно этот объект удерживал (не уверен, правильно ли) слово делегатский вызов, а не объект swipeLeftGesture. Установка его делегата на ноль в dealloc сделала свое дело.

Другие вопросы по тегам