popToRootViewController аварийно завершает работу при вызове UITabBarControllerDelegate - PullRequest
3 голосов
/ 20 мая 2011

У меня есть UITabBarController с 4 UINavigationControllers.Я реализовал метод делегирования didSelectViewController следующим образом:

-(void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
if ([viewController isKindOfClass:[UINavigationController class]]) {
    [(UINavigationController *)viewController popToRootViewControllerAnimated:NO];

}
}

Сбой, когда NavigationController находится на 2-м уровне после того, как didSelectRowAtIndexPath помещает новый viewController в стек.

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

// Navigation logic may go here. Create and push another view controller.

RootViewController *detailViewController = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil];

// ...    
detailViewController.title = [self.temp objectAtIndex:indexPath.row];
detailViewController.sort = self.title;

// Pass the selected object to the new view controller.
[self.navigationController pushViewController:detailViewController animated:YES];
[detailViewController release];

}

Конечно, отладчик с включенным NSZombies не дает никакой обратной связи.

Однако, если я добавлю сохранение в detailViewController alloc;

RootViewController *detailViewController = [[[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil] retain];

Это работает, но утечкапамять.

Есть идеи, что не так, как исправить, что происходит?

1 Ответ

0 голосов
/ 18 февраля 2013

У меня похожий сценарий, и я нашел следующее решение.

В моем приложении у меня при запуске отображается экран входа в систему, а затем у меня UITabbarController с 4 UINavigationControllers.

Я создал свойствоUINavigationController в файле AppDelegate.h.

@property (strong, nonatomic) UINavigationController *navigationController;

Затем

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions         (NSDictionary *)launchOptions
{
 //Override point for customization after application launch.
LoginViewController *loginViewController = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil];
self.navigationController = [[UINavigationController alloc] initWithRootViewController:loginViewController];
self.window.rootViewController = self.navigationController;
[self.window makeKeyAndVisible];

return YES;
}

Теперь, когда вам нужно перейти в RootViewController, используйте следующий код

#import "AppDelegate.h"

[((AppDelegate *)[[UIApplication sharedApplication] delegate]).navigationController popToRootViewControllerAnimated:YES];

Надеюсь, эторешает вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...