Я провел часы, и я не могу понять это. У меня есть контроллер представления детали (UITableView), который запускается здесь:Superview is Nil после второго запуска контроллера просмотра
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
EventLocationDetailController *newDetailViewController = [[EventLocationDetailController alloc] initWithNibName:@"EventLocationDetailController" bundle:nil];
self.eventDetailController = newDetailViewController;
[self.navigationController pushViewController:self.eventDetailController animated:YES];
[newDetailViewController release];
}
В контроллере представления подробно есть метод кнопки, которая вызывает метод ниже, чтобы отобразить слайд-в-выдвижные анимации, подтверждающие пользователь выбор:
-(void)confirmLastActionWithMessage:(NSString *)message {
ConfirmActionViewController *newConfirmActionViewController = [[ConfirmActionViewController alloc] initWithNibName:@"ConfirmActionViewController" bundle:nil];
self.confirmActionViewController = newConfirmActionViewController;
[newConfirmActionViewController release];
[[self.view superview] addSubview:self.confirmActionViewController.view];
}
метод протокола вызывается ConfirmActionViewController, указывающий, что анимация закончена.
-(void)didFinishConfirmDisplay:(UIView *)viewToRemoveFromSuperview {
[viewToRemoveFromSuperview removeFromSuperview];
}
Это работает в первый раз, когда я нажимаю кнопку. Если я вытащу контроллер детали и верну его обратно в стек и снова нажму кнопку, ничего не произойдет, и супервизор контроллера детали равен нулю при каждом вызове метода после этого. Superview не ноль в методе viewWillAppear
для подробного представления, только когда он получает метод confirmLastActionWithMessage. Между пользователем нет другого взаимодействия с пользователем. Как мне вернуть супервизор? У меня есть аналогичный код, который работает без анимации.
Я также заметил, что контроллер подробного представления не вызвал dealloc, когда выскочил из стека. Не знаю, где проблема.
Спасибо.
EDIT 1
OK. Я заменил строку addSubview следующим образом:
[self.view insertSubview: self.confirmActionViewController.view atIndex: 0];
и анимационный вид появился под одной из ячеек таблицы. Может ли одна из ячеек таблицы украсть супервизор?
Что Вы будете выглядеть? В частности, добавили ли вы пользовательскую логику в свойства? – mydogisbox
@property (неатомный, сохранить) ConfirmActionViewController * confirmActionViewController; –
Реализация, а не декларация. У вас есть '@ synhesize' или что-то еще? – mydogisbox