Puede ; ser llamado antes de configurar rootviewcontroller

Mi requisito es que UITabBarController sea el rootviewcontroller y en la primera vez que inicie la aplicación, quiero mostrar el procedimiento de inicio de session que está dentro de UINavCon, y lo estoy visualizando a través de presentViewController .

No quiero que el UITabBarController sea visible por primera vez y no deseo cómo iniciar session UINavCon apareciendo como modal.

Quiero hacer que el usuario experimente que si la aplicación se inicia por primera vez, el inicio de session UINavCon debería estar visible. Entonces, aquí está mi código:

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; [self.window makeKeyAndVisible];//is it correct to call it here? LoginVC *loginObj = [[LoginVC alloc]init]; self.navigationController = [[UINavigationController alloc] initWithRootViewController:cellPhoneNumber]; self.tabBarController = [[UITabBarController alloc]init]; self.window.rootViewController = self.tabBarController; [self.tabBarController presentViewController:self.navigationController animated:NO completion:^{}]; return YES; } 

Estoy llamando [self.window makeKeyAndVisible]; en la segunda línea justo después de uiwindow alloc init . ¿Es correcto hacer esto o puedo experimentar problemas como viewcontroller que no recibe notifications de events o orientaciones?

Puedes llamarlo cuando quieras. Llamarlo afecta la propiedad de índice y pantalla z de la window. No depende de que se establezca ningún contenido específico.

No ha mencionado si el código funcionó o no utilizando su implementación. De todos modos, he hecho recientemente un tipo similar de implementación donde tenemos que presentar el controller de inicio de session y luego tabBarController después de iniciar session, así que solo compartir mi implementación.

  1. Cree su controller de inicio de session y didFinishLaunching en el método didFinishLaunching .

     self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; LoginController *loginCObj= [[[MainScreenController alloc]init]autorelease]; UINavigationController *navigationControllerObj = [[[UINavigationController alloc]initWithRootViewController:loginObj]autorelease]; self.window.rootViewController = navigationControllerObj; [self.window makeKeyAndVisible]; 
  2. Luego de iniciar session con éxito en su controller de vista de inicio de session, llame a un método público appDelegate

    En el controller de inicio de session

     AppDelegate *appDel = (AppDelegate *)[[UIApplication shanetworkingApplication] delegate]; [appDel applicationLoggedInSuccesfully]; 

    En su file appDelegate, agregue un método como este:

     -(void)applicationLoggedInSuccesfully{ UINavigationController *nv1 = [[[UINavigationController alloc] initWithNibName:nil bundle:nil]autorelease]; TabController1 *v1 = [[[TabController1 alloc] initWithNibName:nil bundle:nil]autorelease]; [nv1 pushViewController:v1 animated:NO]; UITabBarController *tabController = [[[UITabBarController alloc] init]autorelease]; tabController.viewControllers = @[nv1]; tabController.delegate = self; self.window.rootViewController = tabController; [self.window makeKeyAndVisible]; } 

Espero que te ayude.