3

電子ブックのように機能するアプリがあります。さまざまなドリルダウン方法でアクセスできるさまざまな言語のテキスト情報がたくさんあります。ユーザーが最後に読んでいた場所に移動したい場合、現在のところ、セクションと章のメニューをナビゲートして元の場所に戻る必要があります。これに対する理想的な解決策は、私が検討しているブックマーク システムをセットアップすることです。

しかし、私の記憶が正しければ、iPhone OS 4 が発表されたとき、アプリの状態を保存する機能が追加されたことは大きな話題になったようです。つまり、私のリーダー アプリを使用している人は、すぐに終了して何でもでき、戻ってきたときに、そのままの読み取り画面になるということですか?

ブックマークシステムのセットアップ方法についてはあまり知りません。調査する価値があると思いますが、iPhone OS 4 で実際にそれができるのであれば、おそらく保留したいと思います。どんな考えや洞察もいただければ幸いです!!

4

4 に答える 4

5

これはiPhoneOSでは常に可能でした。ほとんどの人はNSUserDefaults、アプリケーションの状態を保存するために使用します。次に、アプリケーションデリゲートの-applicationDidFinishLaunchingメソッドで、またはビューを設定してアプリケーションの状態を初期化する場所で、を使用して保存した状態を復元するだけですNSUserDefaults

于 2010-04-21T15:29:51.353 に答える
5

他の人が指摘しているように、これは OS4 に固有のものではなく、すべてのアプリにこれを実装することをお勧めします。

たとえば、ユーザーが本のページをめくったときに、次のようにそのページへの参照を保存することをお勧めしNSUserDefaultsます。

NSUserDefaults *userPreferences = [NSUserDefaults standardUserDefaults];
[userPreferences setObject:currentPageNumber forKey:@"pageNumber"];

アプリケーションが起動すると、この値を読み取り、それに応じて行動できます。

[[NSUserDefaults standardUserDefaults] stringForKey:@"pageNumber"];

アプリケーションが閉じようとしているときにのみ参照を保存することを好むかもしれませんが、(アプリケーションが予期せず終了する場合に備えて) より早く保存することをお勧めします。


また、ユーザーは多くの「ドリルダウン方法」をナビゲートすると述べています。NSMutableArrayユーザーがアプリ内にいる正確な場所に記録を保持し、これを保存することNSUserDefaultsもできます。アプリの起動時に、この配列の情報を処理して、ユーザーが中断したところに戻るようにします。

于 2010-04-21T15:39:57.953 に答える
3

それらが保存状態に対して意味するのは、バックグラウンドアプリケーション用です。電子書籍アプリはおそらくバックグラウンドで実行する必要がないため、OS 3の場合と同様に、状態を保存して復元する必要があります。NSUserDefaultsはこれに適しています。

于 2010-04-21T15:31:37.517 に答える
3

ナビゲーション コントローラーを使用している場合は、次のコード行を使用してアプリの状態を保存できます。

NSMutableArray *listOfClasses = [[NSMutableArray alloc] init];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults removeObjectForKey:@"ViewControllers"];
NSArray *controllers = [_navController viewControllers];

for(UIViewController *VC in controllers)
    [listOfClasses addObject:[NSString stringWithFormat:@"%@",[VC class]]];

[defaults setObject:listOfClasses
             forKey:@"ViewControllers"];
[defaults synchronize];

アプリケーションの終了時にバックグラウンドに入り、次のコード行を使用してアプリを復元できます。

 NSArray *classes = [[NSUserDefaults standardUserDefaults] objectForKey:@"ViewControllers"];
if(classes != nil) {
    for(NSString *class in classes) {
        if([class isEqualToString:@"FirstViewController"]) {
            FirstViewController *viewController  = [[FirstViewController alloc] init];
            [controllers addObject:viewController];
            [viewController release];
        } else if([class isEqualToString:@"SecondViewController"]) {
            SecondViewController *viewController  = [[SecondViewController alloc] init];
            [controllers addObject:viewController];
            [viewController release];
        } else if([class isEqualToString:@"ThirdViewController"]) {
            ThirdViewController *viewController  = [[ThirdViewController alloc] init];
            [controllers addObject:viewController];
            [viewController release];
        } else {

        }
    }
 }

アプリケーションの時点でロードを完了しました

于 2012-04-20T10:15:27.243 に答える