2015-01-20 4 views
1

Когда я впервые пришел на экран входа в систему, я сохраняю значение в NSUserDefaults. Когда я нажимаю на signinButtonAction, чтобы перейти на DetailScreen, он держится и никогда не движется вперед. Я сделал DetailScreen, встроенный в Navigationcontroller, как InitialViewController, даже следующий экран не переходит на другие экраны, когда я снова его запускаю, он приходит в DetailScreen, а затем DetailScreen stucks перейти к другим экранам.IOS: как обращаться с контроллерами представлений сперва Логин ios

Как с этим справиться?

Мой код здесь:

AppDelegate

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

    if ([[NSUserDefaults standardUserDefaults] objectForKey:@"email"]) 
    { 
     UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 

     categoryVC *viewController = (categoryVC *)[storyboard instantiateViewControllerWithIdentifier:@"categoryVC"]; 
     [self.window setRootViewController:viewController]; 
    } 
    else 
    { 
     UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 

     signInVC *viewController = (signInVC *)[storyboard instantiateViewControllerWithIdentifier:@"signInVC"]; 
     [self.window setRootViewController:viewController]; 
    } 

в SigninButtonAction я делаю:

{ 
    categoryVC * second= [self.storyboard instantiateViewControllerWithIdentifier:@"categoryVC"]; 

    [self.navigationController pushViewController:second animated:YES]; 
} 



enter image description here

+0

Кроме того, хорошее предложение NickCatib, который не решает проблему, не так убедитесь, что self.storyboard действительно имеет значение, отличное от нуля? –

+0

Кстати, вы не должны бросать signInVC в категориюVC. в этом случае это не имеет значения, потому что UIViewController будет. (без броска). Кроме того, ваши имена классов всегда должны начинаться с буквы верхнего регистра. –

+0

Не могли бы вы опубликовать скриншот своей раскадровки? – Arjuna

ответ

3

Я бы не установил RootViewController, если у вас есть такой рабочий процесс. Я бы создавал экземпляр главного контроллера представления, как есть, и если вам нужно показать auth, я бы использовал presentViewController. Позже вы можете уволить или что-то в этом роде.

Итак, в вас приложение делегата:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    if (nil == [[NSUserDefaults standardUserDefaults] objectForKey:@"email"]) 
    { 
     UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
     categoryVC *viewController = (categoryVC *)[storyboard instantiateViewControllerWithIdentifier:@"signInVC"]; 
     [self.window.rootViewController presentViewController:viewController animated:NO]; 
    } 
} 

, а затем, когда вы делаете авторизацию и проходит:

[self dismissViewControllerAnimated:TRUE completion:nil]; 
+0

well Как это сделать в делете делегата? – magid

+0

- (BOOL) применение: (UIApplication *) didFinishLaunchingWithOptions применение: (NSDictionary *) launchOptions { если (ноль == [[NSUserDefaults standardUserDefaults] objectForKey: @ "электронная почта"]) { UIStoryboard * раскадровки = [UIStoryboard storyboardWithName : @ «Основной» комплект: ниль]; КатегорияVC * viewController = (categoryVC *) [раскадровка instantiateViewControllerWithIdentifier: @ "signInVC"]; [self.window.rootViewController presentViewController: viewController animated: NO]; } } – Arjuna

+0

Thnx user289 ... У меня проблема с сетью и будет обновлять ответ. Когда вы выполняете авторизацию, вы можете вызвать [self rejectViewController]. Я по телефону, поэтому я думаю, что есть анимированный параметр. Будет опубликован правильный синтаксис, как только я нахожусь на компьютере. – Miknash

Смежные вопросы