сбой приложения при отправке нового контроллера представления в контроллер self.navigation - PullRequest
1 голос
/ 30 декабря 2011

У меня есть приложение для iOS 5.Когда я хочу выдвинуть представление на мой контроллер навигации, приложение падает: (

Вот моя часть appDelegate:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.


    self.navigationController=[[UINavigationController alloc] init];

    StartViewController *startViewController=[[StartViewController alloc] init];
    [self.navigationController pushViewController:startViewController animated:YES];
    [self.navigationController setNavigationBarHidden:YES];
    [[UIApplication sharedApplication] setStatusBarHidden:YES];

    self.window.backgroundColor = [UIColor whiteColor];
    self.window.rootViewController=self.navigationController;
    [self.window makeKeyAndVisible];
    return YES;
}

Вот мой метод проталкивания нового контроллера представления:

-(IBAction)startPressed:(id)sender
{
    NSLog(@"startPressed: called");
    //loading RootViewController (mainscreen view)
    RootViewController *rootViewController=[[RootViewController alloc] init];
    [self.navigationController pushViewController:rootViewController animated:YES];
}

Приложение разбилось на строку [self.navigationController pushViewController:rootViewController animated:YES];

Помогите, пожалуйста. Как решить эту проблему?

Ответы [ 5 ]

4 голосов
/ 30 декабря 2011

UINavigationController хочет иметь rootviewController:

StartViewController *startViewController=[[StartViewController alloc] init];
self.navigationController=[[UINavigationController alloc] initWithRootViewControllr:startViewController];

[self.navigationController setNavigationBarHidden:YES];
[[UIApplication sharedApplication] setStatusBarHidden:YES];

Изменить

@autoreleasepool { 
     return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 
}

на

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 
[pool release];

return retVal;

3 голосов
/ 04 января 2012

Решил проблему. Я изменил `[self.navigationController pushViewController: vc animated: NO] и отладка дала мне предупреждение о том, что выход представления не был установлен. Таким образом, я подключил вид из конструктора интерфейса и проблема исчезла Спасибо всем за помощь

1 голос
/ 02 января 2012

У меня та же проблема с pushViewController, но когда я пытаюсь что-то вроде этого

UINavigationController *rootViewController = (UINavigationController *)[[[UIApplication sharedApplication] keyWindow] rootViewController];
NSLog(@"NavControler:%@, %@", self.navigationController, rootViewController);

, я получаю те же очки, а NSArray имеет 1 элемент.Проблема в другом.

Если кто-то может помочь и добавить какой-то код, который будет работать для pushViewController, потому что у меня правильный NavigationController, но когда я пытаюсь нажать ViewControler, я получаю ошибку

  ViewController* NextView = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
UINavigationController *rootViewController = (UINavigationController *)[[[UIApplication sharedApplication] keyWindow] rootViewController];
[rootViewController pushViewController:NextView animated:YES];

Пожалуйста, может кто-нибудь объяснил мне эту проблему.

1 голос
/ 30 декабря 2011

Это странный способ иметь дело с UINavigationController. В вашем случае я хотел бы знать, если это работает, если вы измените

self.navigationController=[[UINavigationController alloc] init];

StartViewController *startViewController=[[StartViewController alloc] init];
[self.navigationController pushViewController:startViewController animated:YES];

до

StartViewController *startViewController=[[StartViewController alloc] init];
self.navigationController=[[UINavigationController alloc] initWithRootViewController:startViewController];

Если ваше приложение все еще дает сбой, было бы интересно узнать, переопределите ли вы -loadView метод класса StartViewController, поскольку вы не инициализируете его с – initWithNibName:bundle:

0 голосов
/ 18 апреля 2016

У меня также есть некоторые проблемы с pushViewController.Я проверил все целевые членства и убедился, что мой xib-файл не был добавлен к нужной цели.Это помогает мне.Я думаю, что вы также должны проверить свой файл XIB.

...