4

iPhone に Web ベースのアプリケーションを 1 つ実装しています。かかってきた電話に応答すると、アプリケーションがフォーカスを維持している状態に戻るのではなく、アプリケーションがもう一度再起動します。

ビューのスタックを実装しています。つまり、ビューをスタック方式で維持しており、各ビューには画像やテキスト情報などの情報が含まれています。3 番目または 4 番目のビューにいる場合、着信に応答した場合、アプリケーションは再起動され、1 番目のビューのみが表示されます。

4ビューレベルに再開する方法を教えてください。

4

2 に答える 2

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
    }
}
于 2009-11-19T10:45:41.930 に答える
0

Apple のDrillDownSaveサンプルを参照してください - その方法を示しています。

于 2009-11-19T10:43:19.590 に答える