2009-11-19 42 views
4

我们正在iPhone中实现一个基于Web的应用程序。如果我应答了来电,我的应用程序将再次重新启动,而不是将应用程序恢复到最后关注的状态。如何恢复iphone应用程序的视图堆栈

我们正在实现堆栈视图。即,我以堆叠方式维护视图,并且每个视图都包含图像和文本信息等信息,如果我处于第3或第4视图,如果我接听了传入的电话,则我的应用程序正在重新启动并且仅显示第1视图。

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

回答

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]; 
    } 
} 

我然后保存vcListNSUserDefaults。要恢复状态,我在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 
    } 
}