2015-09-23 2 views
-1

Нам нужно изменить StartViewController. В нашем приложении StartViewController находится в Login.h. После успешного завершения входа в систему, в следующий раз нет необходимости показывать Login.h. Таким образом, мы попытались изменения View в AppDelegate, как это:Скрыть loginScreen после успешного входа в цель-C

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    [NSThread sleepForTimeInterval:3.0]; 
    NSString *myString = [[NSUserDefaults standardUserDefaults]stringForKey:@"loginpin"]; 
    if (myString.length != 0) { 
     NSLog(@"Select Items %@",myString); 
     self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
     self.loginViewController = (ViewController*)[ourStoryBoard instantiateViewControllerWithIdentifier:@"Main"]; 
     self.window.rootViewController = self.loginViewController; 
     self.window.backgroundColor = [UIColor grayColor]; 
     [self.window makeKeyAndVisible]; 
    } 
    return YES; 
} 

Но мы получаем это сообщение в консоли:

окна приложений, как ожидается, иметь контроллер представления корня в конце запуска приложения

Затем он показывает пустой экран. Пожалуйста, направляйте меня. Что не так в коде? Есть ли другой способ скрыть loginScreen после успешного входа в систему?

+0

Это Happenin g после успешного входа в систему?Работает ли NSLog? –

+0

Вы проверили, что self.loginViewController не ноль? –

+0

Надеемся, что эта ссылка станет полезной для вас: http://stackoverflow.com/questions/7520971/applications-are-expected-to-have-a-root-view-controller-at-the-end-of-applicati http://stackoverflow.com/questions/12784411/application-windows-are-expected-to-have-a-root-view-controller-at-the-end-of-ap –

ответ

0

Я так думаю [NSThread sleepForTimeInterval:3.0]; Этот код вызывает проблему.

Попробуйте удалить вышеуказанный фрагмент кода и попробуйте. Если вам нужно больше времени для завершения загрузки, вы должны создать другое представление, похожее на экран заставки, которым вы управляете.

Также проверьте, что в Storyboard u установлен любой контроллер вида в качестве контроллера начального вида.

enter image description here

0

Первый раз, когда ваше приложение работает не будет никакого контента внутри loginpin. Проверка ниже будет всегда сбой

NSString *myString = [[NSUserDefaults standardUserDefaults]stringForKey:@"loginpin"]; 
if (myString.length != 0) 
{ 
    //... 
} 

У вас также нет предложения else. Если эта проверка не удалась, приложение ничего не отобразит. Вы должны написать что-то вроде:

if (myString.length != 0) 
{ 
    // dispaly homepage 
} 
else 
{ 
    // display login 
} 

ТАКЖЕ Обратите внимание, что запуск [NSThread sleepForTimeInterval:3.0]; внутри этого обратного вызова невероятно плохая практика. Если вам нужно отложить загрузку, вы должны создать новый заставку. IOS будет закрыть приложение, если этот обратный вызов занимает слишком много времени, чтобы закончить

0

Попробуйте это ..

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    [NSThread sleepForTimeInterval:3.0]; 
    NSString *myString = [[NSUserDefaults standardUserDefaults]stringForKey:@"loginpin"]; 
    if (myString.length != 0) 
    { 
     NSLog(@"Select Items %@",myString); 
     self.loginViewController = (ViewController*)[ourStoryBoard instantiateViewControllerWithIdentifier:@"Main"]; 
     self.window.rootViewController = self.loginViewController; 
    } 
    else 
    { 
     YourHomeViewController *homeView = [ourStoryBoard instantiateViewControllerWithIdentifier:@"YourHomeViewIdentifier"]; 
     self.window.rootViewController = homeView; 
    } 
    return YES; 
} 
0

решения для вашего requiremnt:

  1. Добавить заставки.

  2. На Splash ScreenviewDidLoad способ показать Логин экрана «s с вашего времени

    - (void)viewDidLoad 
    { 
        //Method to show login screen with dealy 
        [self performSelector:@selector(showLoginVC) withObject:nil afterDelay:2.0f]; 
    } 
    

-(void)showLoginVC 
    { 
     //get current loginVC object 
     UINavigationController *objUINavigationController = objectHere 
     if (objUINavigationController) 
     { 
     //set in rootViewController of UIWindow 
     [objAppDelegate.window setRootViewController:objUINavigationController]; 
     } 
    } 

Примечание: Если вы хотите change root view controller with animation

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