Скрыть экран входа в систему после успешного входа в цель-C

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

- (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 после успешного входа в систему?


person Naresh Koppera    schedule 23.09.2015    source источник
comment
Это происходит после успешного входа в систему? Это NSLog работает?   -  person Midhun MP    schedule 23.09.2015
comment
Вы проверили, что self.loginViewController не равен нулю?   -  person Muhammad Waqas Bhati    schedule 23.09.2015
comment
Надеюсь, эти ссылки окажутся вам полезными: stackoverflow.com/questions/7520971/ stackoverflow.com/questions/12784411/   -  person Dharmesh Siddhpura    schedule 23.09.2015
comment
Не забывайте комментировать ответы или отвечать на комментарии. Если один или несколько ответов помогли решить вашу проблему, проголосуйте за него или отметьте его как верхний ответ, если применимо. Пожалуйста, не оставляйте вопросы открытыми, так как другие, столкнувшиеся с той же проблемой, не узнают, что решило вашу проблему.   -  person Simon McLoughlin    schedule 23.09.2015


Ответы (4)


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

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

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

введите здесь описание изображения

person Mukesh    schedule 23.09.2015

При первом запуске вашего приложения внутри loginpin не будет содержимого. Приведенная ниже проверка всегда терпит неудачу.

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

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

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

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

person Simon McLoughlin    schedule 23.09.2015

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

- (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;
}
person Ravi    schedule 23.09.2015

Решение вашего требования:

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

  2. В методе viewDidLoad заставки отобразить экран входа в систему с указанием времени

    - (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];
      }
    }

Примечание. Если вы хотите изменить контроллер корневого представления с анимацией

person Paresh Navadiya    schedule 23.09.2015