gestureRecognizer shouldReceiveTouch坚持在解除分配视图导致崩溃

我有一个相当简单的UITableView,在堆栈上推新视图。 新视图有一个像这样初始化的gestureRecognizer

@synthesize swipeGestureLeft; - (void)viewDidLoad { swipeGestureLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(toggleViewLeft)]; swipeGestureLeft.numberOfTouchesRequired = 1; swipeGestureLeft.delegate=self; swipeGestureLeft.direction = (UISwipeGestureRecognizerDirectionLeft); [self.view addGestureRecognizer:swipeGestureLeft]; } 

我也调用委托方法

 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { if (viewShown==1) { return NO; } return YES; } 

并在我有dealloc方法

 - (void)dealloc { NSLog(@"I AM IN DEALLOC"); swipeGestureLeft.delegate=nil; [self.view removeGestureRecognizer:swipeGestureLeft]; swipeGestureLeft=nil; } 

在我的.h文件中

 @interface MyViewController : UIViewController <UIGestureRecognizerDelegate> 

现在,当我回到我的表视图,现在当我尝试向下滑动我的表查看应用程序崩溃时,视图被取消分配(我可以看到,因为NSLog触发):

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

如何确保在视图解除分配之后不调用委托方法。

解决:我使用新的iOS7 navigationController.interactivePopGestureRecognizer,并已设置其委托给“自我”。

一旦释放,我没有把它的代表设置为“无”。 正是这个对象保留(不知道是否正确的话)委托调用,而不是swipeLeftGesture对象。 在dealloc中设置它的委托为零。