2013-09-13 1 views
3

У меня довольно простой 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 

Как обеспечить, чтобы метод делегата не вызывался после освобождения представления.

+0

Как вы объявляете swipeGestureLeft? – dmur

+0

@property (сильный, неатомный) UISwipeGestureRecognizer * swipeGestureLeft; – Eric

+1

Хм. Не уверен, что здесь происходит. Я бросил ваш код в шаблон Master-Detail, но не смог выполнить репликацию ошибки. – dmur

ответ

7

SOLVED: Я использую новый iOS7 navigationController.interactivePopGestureRecognizer и назначил его делегату «self».

После освобождения мне не удалось установить его делегат на «nil». Именно этот объект сохранял (не уверен, правильно ли слово), что вызов делегата, а не объект swipeLeftGesture. Установка его делегата на ноль в dealloc сделала трюк.

+1

Я попытался установить делегат на нуль в 'dealloc', но это кажется слишком запоздалым. Удалось установить делегат на nil в 'viewWillDisappear' или переопределить' UINavigationController' и правильно установить делегатов. –

Смежные вопросы