2016-07-26 15 views
0

私のアプリケーションには4つのviewControllerがあります。ユーザーが現在2番目のviewControllerにいて、彼がアプリケーションを終了したとします。Swiftを使用してアプリケーションの状態を保存する

ここで、この状態を保存すると、ユーザーがアプリケーションを再び開くときに、2番目のviewContollerが表示され、最初のviewContollerに戻ることができるようになります。

私が考えている解決策は、現在の画面の変数をuserDefaultsに保存してから、そのviewControllerをrootViewControllerにすることです。しかし、私はそれが適切な解決策ではないことを知っており、私はナビゲーションも失うでしょう。 ありがとうございました。

+0

NSURLをNSUserDefaultsに書き込むことをお勧めします。このNSUserDefaultsは、現在の状態を取得する方法を詳述するナビゲーションコントローラパスに一致します。 –

+0

@AbhiBeckertあなたは答えで詳しく記述できますか? – Byte

+0

私は完全な答えを書く時間がありませんでした、おそらくあなたはそれを行うことができますか?しかし、例えば音楽アプリでは、特定の曲のための「現在再生中の」コントローラを表示するために、URLは 'https:// my-music-app.com/playlists/playlist-name/song-name'ボタンを押すと、その曲を含むプレイリストに移動し、もう1つのボタンでプレイリストのリストに移動します。このURLは、アプリ内の共有ボタンなど、他の目的に使用できます。また、アプリをインストールしていないユーザーの場合は、URLを処理できる実際のWebサーバーを使用することもできます。 –

答えて

0

あなたはまだ持っている場合は、すべてのあなたのUIViewControllersから延長すべきBaseViewControllerというクラスを作成するには:

class BaseViewController: UIViewController { 

    override func viewDidAppear(animated: Bool) { 
     super.viewDidAppear(animated) 

     // always remember last controller shown 
     NSUserDefaults.standardUserDefaults.setObject(classForCoder(), forKey: "lastController") 
    } 
} 

あなたは、あなたがしたいint型の識別子またはsomenthingをコントローラのクラス名を保存することができます。 次に、アプリケーションのデリゲートでアプリケーションを開始するときに、この値を読み取り、カスタムロジックを作成して適切なコントローラを開くことができます。

if NSUserDefaults.standardUserDefaults().stringForKey("lastController") == MyCustomViewController.classForCoder() { 
    // open MyCustomViewController 
} 

次に、ユーザーが戻ったときに、アプリケーションフローに従って正しいUIViewControllerにリダイレクトします。

関連する問題