残念ながら、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
}
}