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

对着背影说爱祢 提交于 2019-12-11 03:02:48

问题


I have a simple scenario.

I push myViewController onto navigation stack.

myViewController is basically showing a collection view over entire screen. I added an additional UIPanGestureRecognizer on this collection view and set myViewController as its delegate. I am retaining a strong reference to that pan gesture recognizer inside myViewController.

When I tap Back, myViewController gets popped from the navigation stack and deallocated. The myViewController's dealloc method gets called as it should. Up to this point everything works as expected.

Then I try to open the same myViewController like the first time and the crash occurs with the message:

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

I have this method implemented in myViewController and it always returns YES. But this shouldn't even matter because no one should even be calling this method because none should have a strong reference to it. Obviously someone is still holding a weak reference since the dealloc method was called on the only instance that ever existed.

Not even the init method of the MyViewController gets called.

I tried to put the following code both in dealloc and in viewWillDisappear:

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

But, it didn't change anything. Every time the same thing - myViewController gets initialized and displayed normally the first time. The second time I try to initialize and push, the exception occurs. Obviously, it is related to the pan gesture recognizer that I added, but I don't see how.


回答1:


The answer to this question ended up fixing my issue that was very similar: gestureRecognizer shouldReceiveTouch persisting in deallocated view causing crash

I was incorrectly setting self.navigationController.interactivePopGestureRecognizer.delegate to self.

So even though the error reported from the NSZombie was in another class. It's gesture recognizer was not actually the culprit, it was my interactivePopGestureRecognizer.



来源:https://stackoverflow.com/questions/28746123/viewcontroller-gesturerecognizershouldrecognizesimultaneouslywithgesturerecogn

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!