불행히도 아이폰은 여기서 당신을 도우려고하지 않습니다. 나는 이것이 당신에게 유용 할 것이라는 것을 보장 할 수는 없지만, 이것이 내가하는 방법이다. 나는 그것의 상태를 저장 할 수 있어야합니다
@protocol SaveState
- (NSData*) saveState;
- (id) initWithSaveState:(NSData*)data;
@end
모든 UIViewController
그것을 구현 : 내 응용 프로그램에서
나는 다음과 같은 프로토콜을 가지고있다. 나는 다음 NSUserDefaults
에 vcList
을 저장
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];
}
}
: applicationWillTerminate:
에서
나는 다음과 같은 코드가 있습니다. 상태를 복원하려면 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
}
}