在具有应该超时的会话时处理挂起的应用程序的最佳方法

时间:2010-11-26 12:05:21

标签: ios4 uialertview session-timeout uiactionsheet suspend

我有一个包含登录会话的应用程序。当应用程序暂停时(iOS 4),我保存当前时间,如果下次应用程序变为活动状态是在暂停时间的15分钟内,我希望它恢复。否则我希望它回到登录屏幕,因为会话已过期。

以下是我正在编写的内容,以实现它:

在app delegate的applicationDidBecomeActive中,如果需要,我会检查时间并显示登录屏幕(模态)。但是问题是,如果应用程序在挂起时显示UIAlertView或UIActionSheet,则在我出现登录屏幕时它不会自动解除它。然后,UIAlertView或UIActionSheet将出现在它根本不属于的登录屏幕上。我知道我可以注册每个UIAlertView和UIActionSheet来监听applicationDidBecomeActive并在需要时解散,但由于我的应用程序中有很多,所以我可以避免这种情况。

我想知道是否有办法解雇所有活动视图,即使另一个视图控制器以模态方式呈现,它仍会保留在屏幕上。

或者,如果有更好的方法来处理iOS 4中的会话超时?

1 个答案:

答案 0 :(得分:1)

我想出了一种没有通知的方法(虽然通知并不像它们看起来那么困难): 我在每个类中添加了一个iVar,显示了一个UIAlertView来保存当前显示的AlertView。在AlertView的定义中:

UIAlertView *alert = [[UIAlertView alloc] initWithTitle: ....
[alert show];
self.alertView = alert;
[alert release];

当AlertView被解雇时清理iVar:

- (void) alertView:(UIAlertView *)alert clickedButtonAtIndex:(NSInteger)index {
    // code goes here
    self.alertView = nil;
}

然后在- (void) viewWillDisappear:(BOOL)animated- (void)dealloc(视情况而定)我添加了:

    [self.alertView dismissWithClickedButtonIndex:0 animated:YES];

UIActionSheet也可以这样做。希望这会有所帮助。

如果您有更好的解决方案,请与我们联系。