2014-09-16 2 views
0

У меня проблема с моим приложением для iOS. как только пользователь будет заблокирован, я хочу привести его непосредственно к моему MainViewController, а не к LoginViewController.Пропустить вид из приложения делегата

enter image description here

Когда я делаю это следующим образом, я получаю пустой взгляд в моем тренажере.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; 

    NSString *storyboardId = nil; 

    if(success){ 
     storyboardId = @"MainView"; 
    } else { 
     storyboardId = @"LoginView"; 
    } 

    UIViewController *controller = [self.window.rootViewController.storyboard instantiateViewControllerWithIdentifier:storyboardId]; 
    self.window.rootViewController = controller; 

    [self.window makeKeyAndVisible]; 
    return YES; 
} 
+1

Вы уверены, что ваш 'storyboardId' являются что вы определили на своей раскадровке? – jMelnik

+0

Да, где te image говорит «PageViewController» У меня есть «MainView» http://www.appcoda.com/wp-content/uploads/2013/11/page-view-controller-5.jpeg мои взгляды являются как другой пользовательский класс, это проблема? –

+0

И он отлично работает, если значение 'success' равно ** NO **? – jMelnik

ответ

0

Поскольку вы выделяете/init self.window, его свойство rootViewController будет равно нулю. Следовательно, ваш метод instantiateViewController отправляется в нуль. Следовательно, он возвращает нуль. И поэтому вы установите rootViewController на nil. Вы можете использовать storyboardWithName: bundle: получить действительную раскадровку для метода instantiateViewController. Но как вы определяете success из своего делегата приложения? Почему бы не просто представить свой логин viewController модально из mainViewController?

+0

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

+0

В поле ViewDidLoad вашего MainViewController, выведите/инициализировать экземпляр вашего LoginViewController, а затем используйте метод «presentViewController: анимированный: завершение:», чтобы отобразить логин. Как только ваш пользователь войдет в систему, используйте 'rejectViewController: анимированный: завершение:', чтобы вернуться к вашему MainViewController. – pbasdf

0

Изменить код:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; 

    NSString *storyboardId = nil; 

    if(success){ 
     storyboardId = @"MainView"; 
    } else { 
     storyboardId = @"LoginView"; 
    } 
    UIStoryboard *st = [UIStoryboard storyboardWithName:@"storyboard_name" bundle: nil]; 

    UIViewController *controller = [st instantiateViewControllerWithIdentifier:storyboardId]; 
    self.window.rootViewController = controller; 

    [self.window makeKeyAndVisible]; 
    return YES; 
} 

На раскадровке имя вы должны поставить имя раскадровки в. То, что я думаю, что вы ошибаетесь, находится на self.window.rootViewController.storyboard, который, я думаю, пуст, потому что self.window был просто выделен.

+0

Я пробовал это, но это также не дает желаемого результата. –

+0

В какой-то момент вы ошибаетесь, потому что я использую этот метод, и он работает. Когда вы определяете класс viewController, убедитесь, что ваш идентификатор раскадровки - это идентификатор раскадровки, а не настраиваемый класс. Также убедитесь, что у вас есть правильное имя для вашей раскадровки. Во всяком случае, очистите данные и снова запустите проект, cmd + shift + k – EridB

0

То, что сработало для меня это сочетание ответов Erid Bardhaj и jMelnik

я вставлять мой loginViewController в Навигационный контроллер

enter image description here

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    UIStoryboard *storyboard = nil; 

    if (IDIOM == IPAD) { 
     storyboard = [UIStoryboard storyboardWithName:@"Main_iPad" bundle: nil]; 
     NSLog(@"I am an iPad"); 
    } else { 
     storyboard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle: nil]; 
     NSLog(@"I am an iPhone"); 
    } 

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

    NSString *username = [[NSUserDefaults standardUserDefaults] objectForKey:@"Username"]; 
    NSString *password = [[NSUserDefaults standardUserDefaults] objectForKey:@"Password"]; 
    NSString *deviceID = [[NSUserDefaults standardUserDefaults] objectForKey:@"DeviceID"]; 

    if(deviceID == nil){ 
     deviceID = [[[UIDevice currentDevice] identifierForVendor] UUIDString]; 
     [defaults setObject:deviceID forKey:@"DeviceID"]; 
    } 

    NSLog(@"DeviceID: %@",deviceID); 


    if((username == (id)[NSNull null] || username.length == 0) || (password == (id)[NSNull null] || password.length == 0)) { 
     LoginViewController *loginViewController = [storyboard instantiateViewControllerWithIdentifier:@"LoginViewController"]; 
     self.window.rootViewController = loginViewController; 

    } else { 
     SWRevealViewController *mainViewController= [storyboard instantiateViewControllerWithIdentifier:@"MainViewController"]; 
     self.window.rootViewController = mainViewController; 
    } 
    [defaults synchronize]; 

    return YES; 
} 
Смежные вопросы