У меня есть tabBarController с двумя вкладками, первый из которых содержит экземпляр NavigatorController. NavigatorController инициируется с помощью настраиваемого viewController "peersViewController", который отображает все сетевые одноранговые узлы в tableView. При выборе однорангового узла экземпляр "FilesListViewController" (который перечисляет файлы в каталоге c: \) помещается в стек навигационной системы.
В этом файлеListViewController у меня есть кнопка, позволяющая ему перейти в каталог документов. Для этого я подключил интерфейс для вызова метода пути gotoDirectory: (NSString *) в корневом контроллере:
- (void)gotoDirectory:(NSString*)path {
[[self navigationController] popToRootViewControllerAnimated:YES];
NSArray *files = [self getFilesFromPeerAtPath:path];
FilesListViewController *filesVC = [[FilesListViewController alloc] initWithFiles:files];
[[self navigationController] pushViewController:filesVC animated:YES];
[filesVC release];
}
Однако, когда я нажимаю эту кнопку, диспетчер навигации выводил мое представление на контроллер корневого представления, но затем созданный экземпляр FilesListViewController не появился. Из журнала я знаю, что пользовательский метод initWithFiles действительно был вызван, и сетевые файлы действительно получили имена файлов.
В этом что-то другое. Я попытался щелкнуть вторую вкладку, а затем вернуться к первой вкладке и huala! мне нужны имена файлов. Похоже, что данные и файлыListViewController действительно были введены в стек навигатора, но дисплей не обновился, а застрял на экране rootViewController (peersViewController).
Я делаю что-то неправильно?
-. Бен
- Отредактировано через 15 минут после публикации вопроса. Я нашел обходное решение, но это беспокоит меня, что поп, а затем нажмите не работает.
- (void)gotoDirectory:(NSString*)path {
PeersListViewController *rootViewController = (PeersListViewController*)[[[self navigationController] viewControllers] objectAtIndex:0];
[[self navigationController] setViewControllers:[NSArray arrayWithObject:rootViewController]];
FilesListViewController *filesVC = [[FilesListViewController alloc] initWithFiles:files];
[[self navigationController] pushViewController:filesVC animated:YES];
[filesVC release];
}
Похоже, что navigationController должен быть обойден таким образом, и мне, вероятно, придется выпустить все viewControllers, которые были в исходном стеке. Однако это работает на симуляторе iphone 3.0.
Если я использую этот код, как это сделать, как следует освобождать память? должен ли я получить исходный NSArray контроллеров view и освободить все?