2012-04-13 2 views
0

My ViewController1 выталкивает ViewController2iPhone: UITableView делегат жив после того, как был выпущен ViewController

ViewController2 *controller = 
    [[ViewController2 alloc] init]; 
[self.navigationController pushViewController:controller 
    animated:NO]; 
[controller release]; 

ViewController2 имеет UITableView ... в XIb файле я подключил делегат с владельцем файла. Также ViewController2 имеет кнопку Готово

- (IBAction)doneButtonPressed { 
    [self.navigationController popViewControllerAnimated:NO]; 
} 

Проблема заключается в том, что если нажать строки таблицы и сделать кнопку в то же время, иногда didSelectRowAtIndexPath: метод вызывает после этого ViewController2 был совали, и у меня есть ошибки SIGABRT и эта вещь в регистраторе :

[__NSCFSet tableView:didSelectRowAtIndexPath:]: unrecognized selector sent to instance 0x62579d0' 

Так как Tableview: didSelectRowAtIndexPath можно назвать после того, как я выскочил viewController2? Он должен быть мертв ...

ответ

2

Одно легко исправить, чтобы сделать это:

- (IBAction)doneButtonPressed { 
    self.tableView.delegate = nil; 
    [self.navigationController popViewControllerAnimated:NO]; 
} 

Таким образом, вы не гарантируете, что в то время как вы оставляете эту точку зрения не больше звонков делегата будут. Вы также можете сделать это в методе dealloc для контроллера вида (вероятно, это лучшее место для него).

+0

Да, именно так я исправил это. Но я просто хочу знать, почему это так. В любом случае спасибо за ответ – Jim

1

popViewController методы выполняют свои задачи асинхронно. Они используют блок анимации для вставки и просмотра viewController. ViewController удаляется из своего супервизора и освобождается в части завершения блока анимации. Авария из-за этой задержки (я думаю, 0,3 секунды).

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