[ViewController жест Recognizer:shouldRecognizeSim одновременно ouslyWithGestureRecognizer:]: сообщение отправлено на освобожденный экземпляр

У меня простой сценарий.

Я толкаю myViewController на стек навигации.

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

Когда я нажимаю Назад, myViewController извлекается из стека навигации и освобождается. myViewController"s dealloc метод вызывается как следует. До этого момента все работает как положено.

Тогда я пытаюсь открыть то же самое 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 и отображается нормально с первого раза. Во второй раз, когда я пытаюсь инициализировать и нажать, происходит исключение. Очевидно, что это связано с распознавателем жестов панорамирования, который я добавил, но я не понимаю, как это сделать.

1 ответ

Ответ на этот вопрос закончил тем, что исправил мою проблему, которая была очень похожа: gestRecognizer должен ReceiveTouch, сохраняющийся в освобожденном представлении, вызывающем сбой

Я неправильно устанавливал self.navigationController.interactivePopGestureRecognizer.delegate для себя.

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

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