У меня есть tabBarController с двумя вкладками, первая из которых содержит экземпляр NavigatorController. NavigatorController запускается с помощью пользовательского viewController "peersViewController", в котором перечислены все сетевые одноранговые узлы в tableView. После выбора однорангового узла экземпляр «FilesListViewController» (который перечисляет файлы в каталоге c: \) помещается в стек navigationController.
В этом файле ListViewController у меня есть кнопка, позволяющая ему перемещаться в директорию документов. Для этого я подключил интерфейс для вызова метода пути gotoDirectory: (NSString *) в rootViewController:
- (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];
}
Однако, когда я нажимаю эту кнопку, navigationController действительно выскальзывает из моего представления в контроллер корневого представления, но затем не открывается экземпляр FilesListViewController, который я создал. Из журнала я знаю, что пользовательский метод initWithFiles действительно был вызван, и сетевые компоненты действительно получали имена файлов.
Что-то еще не так в этом. Я попытался нажать на вторую вкладку, а затем вернуться к первой вкладке, и хуала! имена файлов, которые мне нужны были там. Похоже, что данные и filesListViewController действительно были помещены в стек navigatorController, но дисплей не обновился, а застрял на экране rootViewController (peersViewController).
Я что-то не так делаю?
-. Бен
- Отредактировано примерно через 15 минут после публикации вопроса. Я нашел обходной путь, но меня беспокоит, что всплывающее окно, а затем push не работает.
- (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];
}
Не похоже, что навигационный контроллер должен быть обойден таким образом, и мне, вероятно, придется выпустить все контроллеры viewController, которые были в исходном стеке. Это, однако, работает на симуляторе iphone 3.0.
Если я использую этот код, как следует обращаться с выпуском памяти? я должен получить оригинальный NSArray viewcontrollers и выпустить все?