2015-02-26 2 views
2

У меня простой сценарий.[ViewController gestureRecognizer: shouldRecognizeSimultaneousWithGestureRecognizer:]: сообщение отправлено на освобожденный экземпляр

Я нажимаю myViewController на навигационную стек.

myViewController В основном показано представление коллекции по всему экрану. Я добавил дополнительный UIPanGestureRecognizer в этом виде коллекции и установил myViewController в качестве своего делегата. Я сохраняю сильную ссылку на этот распознаватель жесты в пределах myViewController.

Когда я нажимаю «Назад», myViewController извлекается из стека навигации и освобождается. Метод myViewControllerdealloc вызывается как следует. До этого момента все работает так, как ожидалось.

Тогда я пытаюсь открыть тот же myViewController, как в первый раз, и происходит сбой с сообщением:

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

У меня есть этот метод, реализованный в myViewController и она всегда возвращает YES. Но это не должно даже иметь значения, потому что никто не должен даже называть этот метод, потому что ни один из них не должен иметь сильную ссылку на него. Очевидно, что кто-то все еще держит слабую ссылку, поскольку метод dealloc был вызван единственным экземпляром, который когда-либо существовал.

Даже не вызывается метод init метода MyViewController.

Я пытался поставить следующий код как в dealloc и в viewWillDisappear:

[self.myPanGestureRecognizer removeTarget:self action:@selector(panGestureAction:)]; 
    [self.collectionView removeGestureRecognizer:self.myPanGestureRecognizer]; 
    self.myPanGestureRecognizer.delegate = nil; 
    self.myPanGestureRecognizer = nil; 

Но это ничего не меняет. Каждый раз, когда одно и то же - myViewController получает initialized и отображается нормально в первый раз. Во второй раз, когда я пытаюсь инициализировать и нажимать, возникает исключение. Очевидно, что это связано с распознающим жесты, который я добавил, но я не вижу, как это сделать.

+0

У меня есть аналогичная проблема, но я думаю, что это связано с другим распознавателем жестов. Если я прокомментирую строку, используемую для добавления моего настраиваемого распознавателя жестов, я все равно получаю ошибку. Есть ли другой распознаватель, который пытается передать сообщение на ваше освобожденное представление? – Jarson

ответ

3

Ответ на этот вопрос в конечном итоге фиксируя мой вопрос, который был очень похож: gestureRecognizer shouldReceiveTouch persisting in deallocated view causing crash

Я был неправильно настройки self.navigationController.interactivePopGestureRecognizer.delegate к себе.

Таким образом, хотя ошибка, сообщаемая NSzombie, была в другом классе. Это распознаватель жестов на самом деле не был виновником, это был мой интерактивный метод распознавания.

+0

Так было, спасибо! –

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