【问题标题】:How to resume view stack of iphone application如何恢复iphone应用程序的视图堆栈
【发布时间】:2009-11-19 10:33:57
【问题描述】:

我们正在 iPhone 中实现一个基于 Web 的应用程序。如果我接听了来电,我的应用程序将再次重新启动,而不是将应用程序恢复到上次获得焦点的状态。

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

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

【问题讨论】:

    标签: ios viewcontroller resume


    【解决方案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 示例 - 它演示了如何做到这一点。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-07-27
        • 1970-01-01
        • 1970-01-01
        • 2010-11-13
        • 1970-01-01
        • 1970-01-01
        • 2019-01-14
        相关资源
        最近更新 更多