2016-01-05 3 views
2

Я действительно структурирован для простой проблемы.Как управлять контроллерами представлений в appdelegate?

Я просто перемещаюсь с одного контроллера вида на другой контроллер вида, используя следующий код.

homescreen *home; 
home=[self.storyboard instantiateViewControllerWithIdentifier:@"home"]; 
[self presentViewController:home animated:YES completion:nil]; 

же код пытались использовать в AppDelegate методе.

UIStoryboard *storyboard; 
sur= [storyboard instantiateViewControllerWithIdentifier:@"survey"]; 
[self.window.rootViewController presentViewController:sur animated:YES completion:nil]; 

Когда я использую этот код, я получаю эту аварию:

Нагрузочного приложение из-за неперехваченное исключение «NSInvalidArgumentException», причина: «Применение попыталось представить всухую контроллер представления модально на цели

Я не хочу делать это как контроллер корневого вида, просто мне нужно его переместить.

ответ

3

Вы только объявили UIStoryboard *storyboard, но не инициализировали его, а в следующей строке вы вызываете метод instantiateViewControllerWithIdentifier по объекту nil. В конце концов переменная storyboard заменяет nil в следующей строке и сбой.

sur= [storyboard instantiateViewControllerWithIdentifier:@"survey"]; 
1

Посетить this.

Я думаю, что Аамир прав. Но, кроме того, вам нужно сделать свое окно видимым.

Вам нужно позвонить

[self.window makeKeyAndVisible]; 

до представления любого ViewController.

0

Просто попробуйте этот код:

UIStoryboard *storyboard; 
survey *sur= [storyboard instantiateViewControllerWithIdentifier:@"survey"]; 
UIViewController *curViewCont = [UIApplication sharedApplication].keyWindow.rootViewController; 
while (curViewCont.presentedViewController) { 
    curViewCont = curViewCont.presentedViewController; 
} 
[curViewCont presentViewController:sur animated:YES completion:nil]; 

Надеется, что это будет работать для вас.

+0

ее не работает для меня? –

+0

@ KishoreKumar вы все еще получаете приложение разбилось? – Mayur

+0

yes mr @Mayur его возвращающая ошибка nil. –

3

Вы не можете представить представление прямо на пустом window.rootViewController. Сначала вам нужно установить его на любой viewController, а затем представить свой viewController, который должен быть показан. Обратитесь к этому коду:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 

    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; 
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]]; 
    InitialViewController *initialVC = [storyboard instantiateViewControllerWithIdentifier:@"InitialViewController"]; 
    self.window.rootViewController = initialVC; 
    [self.window makeKeyAndVisible]; 

    ShowThisViewController *showThisVC = [storyboard instantiateViewControllerWithIdentifier:@"ShowThisViewController"]; 
    [self.window.rootViewController presentViewController:showThisVC animated:YES completion:nil]; 

    return YES; } 
1

Использовать этот код

DEMORootViewController *VerifyV = [self.storyboard instantiateViewControllerWithIdentifier:@"Identifier"]; 

    UINavigationController *navigationController=[[UINavigationController alloc]initWithRootViewController:VerifyV]; 

    self.window.rootViewController = navigationController; 
Смежные вопросы