0

我目前正在构建一个 iOS 应用程序,并试图找出呈现必要屏幕的最佳方式。

该应用程序是基于选项卡的应用程序,但在用户登录之前,选项卡栏及其子项不应可见。

目前,应用程序委托在调用时将 tabbarcontroller 设置为根视图控制器application:didFinishLaunchingWithOptions,然后如果需要,tab bar 控制器中的第一个控制器会显示登录视图控制器。

这种方法的问题是标签栏中的第一个视图控制器非常忙。它向外部 API 发出一些请求,其中一些首先需要有效的会话令牌。

除非有人可以提出更好的解决方案,否则我想做的是检查application:didFinishLaunchingWithOptions是否存在有效的会话 ID。如果有,将 tabBarController 设置为 rootViewController,如果没有,将登录控制器设置为根视图控制器。

任何人都可以看到这个想法的任何陷阱吗?

4

2 回答 2

1

使用 NSUserDefault 存储 bool 值,这将是第一次为 true,登录屏幕将与将 bool 值设置为 false 一起出现。所以第二个登录屏幕不会出现

在 application:didFinishLaunchingWithOptions 方法中添加这个:

 [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"FirstTime"];
 [[NSUserDefaults standardUserDefaults] synchronize];

现在

 if([[NSUserDefaults standardUserDefaults] boolForKey:@"FirstTime"] == YES)
 {
    [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"FirstTime"];
    [[NSUserDefaults standardUserDefaults] synchronize];
   //login screen
 } 
于 2012-09-05T12:05:48.540 回答
0

我在我的应用程序中使用了这两种方法,你描述的第一种是最好的,因为你不需要改变视图控制器层次结构。您确实应该在 NSUserDefaults 中存储一个布尔值,并在您的第一个视图控制器中存储另一个布尔值。检查标签栏的第一个视图控制器的 viewDidLoad 方法中的 userDefault bool 值以查看用户是否经过身份验证,如果没有,请将第一个视图控制器的布尔值设置为适当的值,并且不要执行您需要通过第三方 API 执行的操作,进行身份验证,将 bool 设置为适当的值并返回到第三方 API。

于 2012-09-05T12:13:06.993 回答