У меня простой сценарий.[ViewController gestureRecognizer: shouldRecognizeSimultaneousWithGestureRecognizer:]: сообщение отправлено на освобожденный экземпляр
Я нажимаю myViewController
на навигационную стек.
myViewController
В основном показано представление коллекции по всему экрану. Я добавил дополнительный UIPanGestureRecognizer
в этом виде коллекции и установил myViewController
в качестве своего делегата. Я сохраняю сильную ссылку на этот распознаватель жесты в пределах myViewController
.
Когда я нажимаю «Назад», myViewController
извлекается из стека навигации и освобождается. Метод myViewController
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
и отображается нормально в первый раз. Во второй раз, когда я пытаюсь инициализировать и нажимать, возникает исключение. Очевидно, что это связано с распознающим жесты, который я добавил, но я не вижу, как это сделать.
У меня есть аналогичная проблема, но я думаю, что это связано с другим распознавателем жестов. Если я прокомментирую строку, используемую для добавления моего настраиваемого распознавателя жестов, я все равно получаю ошибку. Есть ли другой распознаватель, который пытается передать сообщение на ваше освобожденное представление? – Jarson