iOS登录模式
Posted
技术标签:
【中文标题】iOS登录模式【英文标题】:iOS Login Modal 【发布时间】:2013-04-13 22:41:08 【问题描述】:我正在编写一个需要用户登录的 ios 应用程序。登录需要向 Web 服务发出 JSON 请求,然后将用户详细信息存储在 Core Data 或任何最佳位置。
此外,我需要在主应用程序启动之前显示登录模式,我知道为此我将其称为 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
。
所以,我需要一个简单的登录名、用户名和密码字段,发出请求,然后将生成的 JSON 数据存储到某个地方,也许是核心数据?
我搜索了一个登录示例的高低,但它们都非常简陋,或者没有完全符合我的要求。我正在考虑创建一个 xib 文件然后调用它,但我不确定。
【问题讨论】:
您可能想尝试AuthNavigation 框架。它基本上为您提供了登录屏幕(和加载屏幕,可帮助您在后台发出 JSON 请求)所需的结构 【参考方案1】:几天前我也在想同样的问题。
这是我的解决方案:
在didFinishLaunchingWithOptions
中,我调用一个方法检查您的数据库中是否有帐户和密码(核心数据?我只是使用用户默认值)。
如果有,请尝试登录,如果登录失败,则显示模态视图。如果成功,请将您的 appdelegate.window.rootviewcontroller 设置为主视图控制器
如果没有,则显示模态视图。
或者登录失败,blablabla...
对不起我的英语不好。 这是我的代码:
- (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)];
);
);
【讨论】:
哦,我的第一个最佳答案!也谢谢你! @詹姆斯 如果有人投反对票,请告诉我为什么,我只是像其他人帮助我一样尝试帮助【参考方案2】:只需让didFinishLaunchingWithOptions
以模态方式将您的LoginViewController
推送到导航堆栈。如果您使用的是故事板,您可以将 LoginViewController
设置为根视图控制器,或者放置一个 segue,给它一个标识符,然后调用 [rootViewController performSegueWithIdentifier:@"YourSegueId" sender:self]
。
【讨论】:
太棒了,谢谢。存储登录数据的最佳做法是什么? 很高兴我能帮上忙。始终将敏感信息存储在钥匙串中。 当然,我不知道钥匙串,我只是想“核心数据”呵呵。谢谢!以上是关于iOS登录模式的主要内容,如果未能解决你的问题,请参考以下文章
vue开发关于微信授权登录以及路由mode模式(Hash|History)和手机平台(andriod|IOS)不得不说的故事