0

我对 UINavigationController 有疑问。它关于客户端或服务器端注销。

服务器端注销的想法是这样的,每 15 秒调用一个函数来检查应用程序是否仍然登录。如果不是这样,则跳转到 LoginViewController。

注销也可以从应用程序本身发生。它执行模拟代码。

有三个相关的控制器,LoginViewController 是我们想要结束的地方,SignOutController 是“退出”按钮所在的位置和 MainViewController。

以下是相关的代码部分。

首先, UINavigationController 像这样分配:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    splashScreenViewController_ = [[SplashScreenViewController alloc] initWithNibName:@"SplashScreenViewController" bundle:nil];

    uiNav_ = [[UINavigationController alloc] initWithRootViewController:splashScreenViewController_];
    uiNav_.navigationBar.barStyle = UIBarStyleBlackTranslucent;
    uiNav_.navigationBarHidden = YES;

    [window_ setRootViewController:uiNav_];

    [window_ makeKeyAndVisible];


    return YES;
}

当按下“退出”按钮或应用程序发现服务器已强制注销时,将执行此代码(相同的代码,不同的功能):

LoginViewController *loginView = [[LoginViewController alloc]initWithNibName:@"LoginViewController" bundle:nil];
[self.navigationController pushViewController:loginView animated:YES];
[loginView release];

如果它是服务器端注销,它只是重新加载 MainViewController,每 15 秒你会看到 MainViewController 滑入的动画。它从那里进入一个循环,每 15 秒重新加载一次。

如果您单击“退出”按钮,它将跳转到 MainViewController 而不是 LoginViewController 并开始上述相同的循环。

PS我已经检查过任何importend变量是否为零,并且我已经检查过初始化代码是否实际执行。

编辑:我想我没有提到这一点。我的应用程序 99% 的时间都可以正常工作。偶尔会发生这种情况,退出按钮不起作用,我开始这个循环。通常它工作正常。

4

2 回答 2

0

对于新的 LoginViewController 滑入其中的 15 秒周期,您似乎并没有在意识到应用程序未登录后停下来检查它是否已登录。您应该有某种布尔值来存储它并取消计时器或您使用的任何东西。

我不明白你说按下注销按钮时会发生什么,但我不认为你正在制作一个好的用户界面。

我建议您通过将 loginViewController 作为 root 添加到导航控制器来启动应用程序。然后你添加不带动画的你想要开始的那个(例如 MainViewController)。每当应用程序从服务中注销时,您都会弹出视图控制器,直到第一个,这应该是登录的。

你有那个方法popToRootViewControllerAnimated:

如果要保留启动画面,可以将其设置为应用程序的根视图控制器,并在加载完成后将其转换为 uiNavigationController。

于 2013-04-06T18:00:15.720 回答
0

计时器不会因为您将视图推到另一个视图上而自动停止。它会一直存在,直到它启动的控制器被释放,这只会在它从堆栈中删除后才会发生。

此外,您不需要在每次检查后将 MainViewController 推入堆栈,您最终会得到它的多个实例,每个实例都在另一个之上。

此外,在不真正了解应用程序架构的情况下,将 LoginViewController 设为模态似乎是个好主意,如果他们没有登录,他们真的无能为力吗?模态呈现的视图控制器不会受到导航堆栈的影响,并且比手动推送/弹出控制器更容易保留用户导航堆栈。

于 2013-04-06T23:08:52.720 回答