1

(首先,如果这是一个非常琐碎的问题,让我道歉。我刚开始使用 iOS 和 Objective-C)

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

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

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

4

3 回答 3

1

你可以这样移动。

使根视图控制器就像启动屏幕一样。在 Root View Controller 中,只需检查应用程序是第一次运行还是第 n 次运行(成功注册后)。如果应用程序是第一次运行,将用户导航到注册页面,如果用户注册成功,将用户导航到主屏幕(或您想要的屏幕)。


要检查应用程序是否第一次运行,您可以使用NSUserDefault.

于 2013-07-18T09:34:32.467 回答
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

我想这会帮助你。

于 2013-07-19T09:59:06.460 回答
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;

}

于 2013-07-18T10:29:00.100 回答