我有一个包含登录会话的应用程序。当应用程序暂停时(iOS 4),我保存当前时间,如果下次应用程序变为活动状态是在暂停时间的15分钟内,我希望它恢复。否则我希望它回到登录屏幕,因为会话已过期。
以下是我正在编写的内容,以实现它:
在app delegate的applicationDidBecomeActive中,如果需要,我会检查时间并显示登录屏幕(模态)。但是问题是,如果应用程序在挂起时显示UIAlertView或UIActionSheet,则在我出现登录屏幕时它不会自动解除它。然后,UIAlertView或UIActionSheet将出现在它根本不属于的登录屏幕上。我知道我可以注册每个UIAlertView和UIActionSheet来监听applicationDidBecomeActive并在需要时解散,但由于我的应用程序中有很多,所以我可以避免这种情况。
我想知道是否有办法解雇所有活动视图,即使另一个视图控制器以模态方式呈现,它仍会保留在屏幕上。
或者,如果有更好的方法来处理iOS 4中的会话超时?
答案 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也可以这样做。希望这会有所帮助。
如果您有更好的解决方案,请与我们联系。