Как возобновить просмотр стека приложения iphone
Мы реализуем одно веб-приложение в iPhone. если я отвечаю на входящий телефонный звонок, мое приложение перезапускается еще раз, вместо того чтобы возобновить приложение до состояния, в котором оно находилось в фокусе.
мы реализуем стек представлений. Т.е. я поддерживаю представления в виде стека, и каждое представление имеет информацию, такую как изображения и текстовую информацию, если я нахожусь в 3-м или 4-м представлении, если я ответил на входящий телефонный звонок, мое приложение перезапускается и показывает только 1-е представление.
Подскажите пожалуйста как перейти на 4й уровень просмотра.
2 ответа
Посмотрите пример Apple DrillDownSave - он демонстрирует, как это сделать.
К сожалению, 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
}
}