有条件地启动App / View

时间:2013-07-18 09:16:56

标签: ios objective-c ios6

(首先,如果这是一个非常微不足道的问题,请向我道歉。我刚开始使用iOS和Objective-C)

我正在使用iOS 6应用,该应用需要经过验证的用户帐户才能运行。注册是两阶段的:用户首先必须注册他/她的姓名和电话号码,然后应用程序将联系后端服务,该服务将通过SMS向用户发送验证码。然后,用户必须将该代码输入应用程序。完成所有操作后,用户终于可以开始使用该应用程序了。

我的问题是:由于注册是一次性过程,在视图方面设计流程的最佳方法是什么?我当前的解决方案基于“启动视图”,它确定用户在注册过程中的位置(未创建,未验证或完成),然后加载正确的视图。然而,这确实有点麻烦,因为我正在创建一个我立即解雇的视图。

编辑:作为后续问题:如果我目前的解决方案可行,那么放置逻辑的最佳位置是什么方法?截至目前,它位于 viewDidLoad

3 个答案:

答案 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;

}