質問: swiftでストップウォッチの様に時間を計り続けるという事をしたいです。 しかし、実機で時間を測り始めてバックグラウンドに切り替えてから少しするとアプリを開いた最初の画面に戻ってしまいます。これは何故でしょう? 因みにこちらのサイトを参考にAppDelegate.swiftの部分だけ編集しました。 https://qiita.com/SatoTakeshiX/items/8e1489560444a63c21e7 仮に時間を測り続けることができなかったとしても、一定時間たってバックグラウンドから戻ると画面遷移する前のアプリが開いたときの状態に戻ってしまうのだけでも何とかしたいです。。。 因みにデフォルトのアプリのストップウォッチの様なことはできないかと思っていましたが、あれは特別な様ですね。あのデフォルトのアプリの様に、バックグラウンドに行ったり閉じたりしても画面に経過時間を出し続ける様なものにしたいのですが、長時間バックグラウンドで動かす様なことは基本的にダメだという事なので、以下の様な流れを考えたのですがどうでしょうか? 1. ローカルに測り始めたときの時間を保存する 2. バックグラウンドから再開された時の処理に再度現在の時刻を取得する。 3. その現在時刻 ー 開始時刻の差分を求めそこからまたカウントスタート&表示 以上な様な流れですが、確かバックグラウンドになったとかフォアグラウンドになったとか判定して処理をかけましたよね?それができれば以上の様な流れで実装できるのでは無いかと思ったのですがどうでしょうか?
回答: バックグラウンドでの処理継続はHayato様のご認識の通りAppleがあまり推奨していませんね。。。 https://qiita.com/teamhimeH/items/51efb4fc68d3f1d2ebb9 バックグラウンドタスクの実行時間も180秒程度までということらしいです。(諸説あり??) >>バックグラウンドに行ったり閉じたりしても画面に経過時間を出し続ける様なものにしたい こちらについてはHayato様の考えているロジックで実現できると思います。 AppDelegateのライフサイクルについて調べると諸々情報出てくると思います。 https://qiita.com/mfujiwara/items/cf3d61a96cf4fdfc1162 本題のバックグラウンドから復帰後に画面がアプリ初回起動時の画面に戻ってしまう件ですが、アプリがクラッシュしているってことはありませんか? 実機でデバックして見て、エラーとなっていないかを確認して頂きたく。 基本的にアプリのフォアグランド、バックグラウンドの切り替えで画面がアプリ初回起動時の画面に戻ってしまうってことはないかなと。 他の可能性としては ・実機のメモリが切迫してしまったため、OSレベルでアプリのタスクをキルされてしまった。(多分可能性は低いですが) ・アプリケーションフォアグラウンド復帰時の処理で、アプリ初回起動時の画面を表示する処理を実行してしまっている。 とかですかね。。。