如何恢复iphone应用程序的视图堆栈

时间:2009-11-19 10:33:57

标签: ios viewcontroller resume

我们正在iPhone中实现一个基于Web的应用程序。如果我接听来电,我的应用程序会再次重新启动,而不是将应用程序恢复到最后一次关注的状态。

我们正在实现一堆视图。即我以堆栈方式维护视图,每个视图都有图像和文本信息等信息,如果我在第3或第4视图中,如果我接听来电,我的应用程序正在重新启动,它只显示第1个视图。 / p>

请告诉我如何恢复到第4级视图。

2 个答案:

答案 0 :(得分: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
    }
}

答案 1 :(得分:0)

参见Apple的DrillDownSave示例 - 它演示了如何做到这一点。