繁体   English   中英

iOS登录模式

[英]iOS Login Modal

我正在编写一个iOS应用程序,需要用户登录。 登录名需要向Web服务发出JSON请求,然后将用户详细信息存储在Core Data中或最佳存储位置。

此外,我需要在主应用程序启动之前出现登录模式,我知道为此我在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

因此,我需要一个简单的登录名,用户名和密码字段,进行请求,然后将生成的JSON数据存储到某个地方,也许是核心数据?

我已经在上下搜索了一个登录示例,但是它们都非常初级,或者没有完全满足我的要求。 我正在考虑创建一个xib文件,然后调用它,但是我不确定这一切。

只需使didFinishLaunchingWithOptions模态地将LoginViewController推送到导航堆栈即可。 如果您使用的是故事板,则可以将LoginViewController为根视图控制器,或者放置一个segue,为其指定一个标识符,然后调用[rootViewController performSegueWithIdentifier:@"YourSegueId" sender:self]

我几天前在想同样的问题。
这是我的解决方案:
didFinishLaunchingWithOptions ,我调用一种方法来检查您的数据库中是否存在帐户和密码(核心数据?我只是使用userdefault)。
如果存在,请尝试登录,如果登录失败,请显示模式视图。 如果成功,请将您的appdelegate.window.rootviewcontroller设置为主viewcontroller
如果什么也没有,请显示模式视图。

或登录失败,等等...

对不起,我的英语不好。
这是我的代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES];

    UINavigationController *nav = [[UINavigationController alloc] init];

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];
    self.window.rootViewController = nav;
    [self.window makeKeyAndVisible];
    [ZTCAPIClient registerUserInfo];
    return YES;
}

+ (void) registerUserInfo {
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    NSString *account = [defaults stringForKey:@"account"];
if(!account) {
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        // load default value
        [self performSelector:@selector(registerDefaultsFromSettingsBundle)];
        dispatch_async(dispatch_get_main_queue(), ^{
            ZTCUserSettingsViewController *userSettingsView = [[ZTCUserSettingsViewController alloc] init];
            UINavigationController *usersSettingsNav = [[UINavigationController alloc] initWithRootViewController:userSettingsView];
            [[[[[UIApplication sharedApplication] delegate] window] rootViewController] presentModalViewController:usersSettingsNav animated:NO];
            [ZTCNotice showSuccessNoticeInView:userSettingsView.view title:[NSString stringWithFormat:@"%@,%@",NSLocalizedString(@"login first time use title", nil),NSLocalizedString(@"login first time use message", nil)]];//TODO
        });
    });
} else {
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        if ([ZTCAPIClient loginWithAccount:[defaults stringForKey:@"account"] Password:[defaults stringForKey:@"password"] BaseURL:[defaults stringForKey:@"url"]]) {
            //DLog(@"Log in SUCCESS");
            dispatch_async(dispatch_get_main_queue(), ^{
                UITableViewController *viewController = [[ZTCTaskListViewController alloc] initWithStyle:UITableViewStylePlain];
                UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:viewController];
                [[[[UIApplication sharedApplication] delegate] window] setRootViewController:nav];
            });
        } else {
            //DLog(@"Log in FAIL");
            dispatch_async(dispatch_get_main_queue(), ^{
                ZTCUserSettingsViewController *userSettingsView = [[ZTCUserSettingsViewController alloc] init];
                UINavigationController *usersSettingsNav = [[UINavigationController alloc] initWithRootViewController:userSettingsView];
                [[[[[UIApplication sharedApplication] delegate] window] rootViewController] presentModalViewController:usersSettingsNav animated:NO];
                [ZTCNotice showErrorNoticeInView:userSettingsView.view title:NSLocalizedString(@"login fail title", nil) message:NSLocalizedString(@"login fail message", nil)];
            });
        }
    });
}
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM