3

私のアプリには、ユーザーが自分でアプリを強制終了した場合でも復元する必要があるView Controllerがあり、それを行いshouldRestoreApplicationStateません。ユーザーがアプリを強制終了した場合、最初のコントローラーに戻ります。

それで、私がやりたいことをする方法はありますか、毎回状態を復元できますか?

状態の復元でそれが不可能な場合は、View Controller を永続ストアに保存して appDelegate から提示できるのではないかと考えましたが、まだわかりませんでした。appDelegate から、タブ バー コントローラーとそのビューまでの複数のナビゲーション コントローラーを含む、ナビゲーション スタック全体を再構築する必要があります。それは良い考えですか?どうすればいいですか?

私はこれのバリエーションを試しました:

        let bookInfoStoryboard = UIStoryboard(name: "BookInfo", bundle: nil)
        let controller = bookInfoStoryboard
            .instantiateViewControllerWithIdentifier("bookInfoTableViewController")
        self.window?.makeKeyAndVisible()
        self.window?.rootViewController!.presentViewController(controller, animated: true, completion: nil)

しかし、さまざまなエラーが発生し続けます。

理想的には、すべてのビュー コントローラーの状態を復元したかったのですが、それは毎回行わなければなりません。それを行うより良い方法はありますか?

ありがとう、

ダニエル

4

2 に答える 2

2

View Controller は一時的な情報を多く保持し、永続的な情報はほとんど保持しないため、View Controller を永続化することはできません。

できることは、View Controller の階層を表す構成を に保存し、user defaultsそこから再構築することです。たとえば、ナビゲーションのようなファイル システムを備えたタブ ビューがあると仮定すると、次user defaultsのような文字列に永続化できますbookmarks.folder1.subfolder2.file18.playing.position=19.28。これは、アプリケーションがクラッシュするか、OS によって終了される前に、再生中のビデオ ファイルが 19.28 秒に達したことに対応している可能性があります。

上記のようなスキーマを使用すると、最後のセッションが終了する前の状態に非常に近い状態にコントローラーを復元できます。そして最良の部分は、ユーザーがアプリケーションが最初からやり直されたことを知る必要さえなく、最後にアプリケーションをナビゲートしたときと同じエクスペリエンスを得ることができるということです。

もちろん、復元はアプリケーションの複雑さのレベルに依存し、アプリケーション内のすべてのフローに適用できるわけではありませんが、そのような場合には、少なくともユーザーを終了前の状態に近いアプリケーション状態に戻すことができます。

于 2016-01-04T21:57:22.297 に答える