(首先,如果这是一个非常微不足道的问题,请向我道歉。我刚开始使用iOS和Objective-C)
我正在使用iOS 6应用,该应用需要经过验证的用户帐户才能运行。注册是两阶段的:用户首先必须注册他/她的姓名和电话号码,然后应用程序将联系后端服务,该服务将通过SMS向用户发送验证码。然后,用户必须将该代码输入应用程序。完成所有操作后,用户终于可以开始使用该应用程序了。
我的问题是:由于注册是一次性过程,在视图方面设计流程的最佳方法是什么?我当前的解决方案基于“启动视图”,它确定用户在注册过程中的位置(未创建,未验证或完成),然后加载正确的视图。然而,这确实有点麻烦,因为我正在创建一个我立即解雇的视图。
编辑:作为后续问题:如果我目前的解决方案可行,那么放置逻辑的最佳位置是什么方法?截至目前,它位于 viewDidLoad 。
答案 0 :(得分:1)
你可以这样移动。
使Root View Controller就像启动画面一样。在Root View 控制器,只是检查应用程序是否第一次运行或 第n次(成功注册后)。如果应用程序正在运行 第一次,导航用户到注册页面,如果用户有 注册成功,导航用户到主屏幕(或您的 所需的屏幕)。
要检查应用是否第一次运行,您可以使用NSUserDefault
。
答案 1 :(得分:1)
您可以使用NSUserDefault检查您的应用是否第一次运行.. 如果是第一次获取值保存并移动到下一个视图。
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if (![defaults objectForKey:@"firstRun"])
[defaults setObject:[NSDate date] forKey:@"firstRun"];
[[NSUserDefaults standardUserDefaults] synchronize];
提供者: - https://stackoverflow.com/a/1664275/1865424
我认为这会帮助你。
答案 2 :(得分:0)
我使用以下代码获取当前状态,然后加载所需的视图,检查是否有帮助:
-(NSString *)get_provision_status{
NSString *status;
NSUserDefaults *prefrences = [NSUserDefaults standardUserDefaults];
status=[prefrences stringForKey:@"PROVISION_STATUS"];
if ([status isEqualToString:@"(null)"] || [status rangeOfString:@"(null)"].location!=NSNotFound)
{
status=[NSString stringWithFormat:@""];
return status;
}
else
return status;
}
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
/*Process for check current provision status*/
current_status=[self get_provision_status];
if ([current_status isEqualToString:@""] || [current_status rangeOfString:@"(null)"].location!=NSNotFound) {
NSLog(@"First Time View");
}
else if ([current_status isEqualToString:@"PROVISION-COMPLETED"]) {
NSLog(@"Home Screen Or view When provision completed");
}
else
{
NSLog(@"Handle any other conditions if you have");
}
self.window.rootViewController = self.navController;
[self.window makeKeyAndVisible];
return YES;
}