如何恢复iphone应用程序的视图堆栈
Posted
技术标签:
【中文标题】如何恢复iphone应用程序的视图堆栈【英文标题】:How to resume view stack of iphone application 【发布时间】:2009-11-19 10:33:57 【问题描述】:我们正在 iPhone 中实现一个基于 Web 的应用程序。如果我接听了来电,我的应用程序将再次重新启动,而不是将应用程序恢复到上次获得焦点的状态。
我们正在实现视图堆栈。即我以堆栈方式维护视图,每个视图都有图像和文本信息等信息,如果我在第三或第四视图中,如果我接听来电,我的应用程序正在重新启动并且它只显示第一视图。
请告诉我如何恢复到第 4 个视图级别。
【问题讨论】:
【参考方案1】:很遗憾,iPhone 在这方面对您的帮助不大。我不能保证这对你有用,但我就是这样做的。
在我的应用中,我有以下协议:
@protocol SaveState
- (NSData*) saveState;
- (id) initWithSaveState:(NSData*)data;
@end
我需要能够保存其状态的任何UIViewController
都会实现它。
在applicationWillTerminate:
我有以下代码:
for (UIViewController* vc in self.navigationController.viewControllers)
if ([vc conformsToProtocol:@protocol(SaveState)])
NSArray* state = [NSArray arrayWithObjects:NSStringFromClass([vc class]), [(UIViewController<SaveState>*)vc saveState], nil];
[vcList addObject:state];
然后我将vcList
保存到NSUserDefaults
。要恢复我在applicationDidFinishLaunching:
中的状态:
for (NSArray* screen in screenList)
UIViewController<SaveState>* next = [[NSClassFromString([screen objectAtIndex:0]) alloc] initWithSaveState:([screen count] == 2) ? [screen objectAtIndex:1] : nil];
if (next != nil)
[[self navigationController] pushViewController:next animated:NO];
[next release];
else
// error handling
【讨论】:
【参考方案2】:请参阅 Apple 的 DrillDownSave 示例 - 它演示了如何做到这一点。
【讨论】:
以上是关于如何恢复iphone应用程序的视图堆栈的主要内容,如果未能解决你的问题,请参考以下文章
iPhone iOS如何在应用程序从后台恢复时添加密码/密码锁定屏幕?