У меня довольно простой UITableView, который подталкивает новый вид в стек. Новый вид имеет gestureRecognizer, который initizalied как этотgestureRecognizer shouldReceiveTouch, сохраняющийся в освобожденном виде, вызывающем крушение
@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
Как обеспечить, чтобы метод делегата не вызывался после освобождения представления.
Как вы объявляете swipeGestureLeft? – dmur
@property (сильный, неатомный) UISwipeGestureRecognizer * swipeGestureLeft; – Eric
Хм. Не уверен, что здесь происходит. Я бросил ваш код в шаблон Master-Detail, но не смог выполнить репликацию ошибки. – dmur