0

Я немного преуменьшен здесь. У меня есть UIModalPresentationFormSheet, и я добавил распознаватель жестов, чтобы обрабатывать отклонение листа формы, если пользователь выбирает где угодно вне листа формы. У меня также есть кнопка отмены на панели навигации в верхней части листа формы. Когда пользователь выбирает вне рамки листа, чтобы использовать распознаватель жестов для отклонения листа формы, все работает нормально. Но когда они используют кнопку отмены, игнорируя распознаватель жестов, как только лист формы закрыт, я получаю ошибку ниже. Я считаю, что его от распознавателя отправляют методу handleTapBehind. Я не понимаю, почему, хотя, поскольку, когда представление отклонено, viewWillAppear не следует вызывать, который выделяет распознаватель на освобожденный метод (handleTapBehind).Сообщение iOS, отправленное на освобожденный экземпляр

Ошибка:

[CallWebViewViewController handleTapBehind:]: message sent to deallocated instance 0x21ee5db0

Код:

- (void)viewDidAppear:(BOOL)animated { 

[super viewDidAppear:animated]; 

if(UIUserInterfaceIdiomPad == UI_USER_INTERFACE_IDIOM()) 
{ 
    if(![self.view.window.gestureRecognizers containsObject:recognizer]) 
    { 
     recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapBehind:)]; 

     [recognizer setNumberOfTapsRequired:1]; 
     recognizer.cancelsTouchesInView = NO; 
     [self.view.window addGestureRecognizer:recognizer]; 
    } 
} 
} 

- (void)handleTapBehind:(UITapGestureRecognizer *)sender { 

if (sender.state == UIGestureRecognizerStateEnded) 
{ 
    CGPoint location = [sender locationInView:nil]; 

    if (![self.view pointInside:[self.view convertPoint:location fromView:self.view.window] withEvent:nil]) 
    { 
     [self dismissViewControllerAnimated:YES completion:nil]; 
     [self.view.window removeGestureRecognizer:recognizer]; 
    } 
} 
} 

ответ

1

Добавьте следующий к viewWillDisappear вашего ViewController:

recognizer.delegate=nil; 

Надеется, что это помогает.

PS: Я не понимаю, ваше последнее предложение:

I dont understand why though because when the view is dismissed, the viewWillAppear should not be called which is allocating the recognizer to a deallocated method (handleTapBehind).

Особенно «выделяемом распознаватель к высвобождены методу»?

+0

Нет, это не сработало. –

+0

Вы проверили, вызывается ли viewWillDisappear? –

+0

Да, это называется. –

 Смежные вопросы

  • Нет связанных вопросов^_^