Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 不同的UIViewController已登录_Ios_Objective C_Uiviewcontroller - Fatal编程技术网

Ios 不同的UIViewController已登录

Ios 不同的UIViewController已登录,ios,objective-c,uiviewcontroller,Ios,Objective C,Uiviewcontroller,当用户打开应用程序时,它会显示loginUIViewController。当用户登录时,重定向到下一个mapkitUIViewController。但当用户再次打开应用程序时,我希望他跳过登录UIViewController。我该怎么做?我尝试在登录方法viewwillbeen中以编程方式重定向,但效果不好(第二次显示控制器) 您可以这样做: AppDelegate.m - (BOOL)application:(UIApplication *)application didFinishLaunc

当用户打开应用程序时,它会显示login
UIViewController
。当用户登录时,重定向到下一个mapkit
UIViewController
。但当用户再次打开应用程序时,我希望他跳过登录
UIViewController
。我该怎么做?我尝试在登录方法
viewwillbeen
中以编程方式重定向,但效果不好(第二次显示控制器)


您可以这样做:

AppDelegate.m

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

    // replace with your real auth-checking
    if ([self wasAuthorized] == NO) {

        [self showLoginController];

    }

    return YES;

}

- (UIViewController *)mainController {

    UINavigationController *rootNavigationController = (UINavigationController *)[[self window] rootViewController];
    return [[rootNavigationController viewControllers] firstObject];

}

- (void)showLoginController {

    UIViewController *loginController = [self loginController];
    dispatch_async(dispatch_get_main_queue(), ^{

        [self.mainController presentViewController:loginController animated:YES completion:nil];        

    });

}

- (UIViewController *)loginController {

    UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    return [mainStoryboard instantiateViewControllerWithIdentifier:@"LoginNavController"];

}

更好的方法是在AppDelegate中添加此检查

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    if(isLoggedin) {
        Storyboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
        UIViewController *mapViewController = [storyboard instantiateViewControllerWithIdentifier:@"mapViewController" ];
        self.rootViewController = [[UINavigationCotroller alloc] initWithRootViewController:mapViewController];
    }
    return YES;
}

不要在第一个视图控制器的
视图中将显示:
方法中检查登录,而是在应用程序代理的
didfishlaunchingwithoptions:
方法中执行此操作:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    if (loggedIn) {
        UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController;
        [navigationController.topViewController performSegueWithIdentifier:@"1to2" sender:navigationController.topViewController];
        return YES;
    }
}
其中
1to2
是从视图控制器1到2的段的标识符