私はタイマーアプリを持っています。それは無期限にカウントされます(ユーザーがタイマーを停止するまで)。これは、デフォルトの iOS クロック ストップウォッチとほとんど同じように機能します。
責任あるバックグラウンド アプリであることに関する記事を読みました。UI の変更は発生しておらず、アプリがバックグラウンドになるとタイマーを停止し、フォアグラウンドに戻るとタイマーを再開します。アプリは約 30 分ごとにローカル通知を送信して、ユーザーに休憩を取るよう促します。
問題: 必ず数時間 (2 ~ 6 時間) 後にアプリが終了し、現在のタイマーと情報が失われます。
私が試したこと:
-前述のように、責任あるバックグラウンド アプリであるというガイドラインに従うようにアプリを変更しました (タイマー UI をカウントアップし、バックグラウンドでもタイマーを実行する前に)。私のアプリは多くのメモリを使用していないか、集中的なタスクを実行していないため、これで問題が解決すると思いました。
-現在のタイマーのデータを (NSUserDefaults に) ApplicationWillTerminate に保存してから、DidFinishLaunchingWithOptions で復元しようとしました。うまくいかないようです。ApplicationWillTerminate が呼び出された場合、データが保存され、アプリの再起動時に復元されるため、私のアプリは強制終了または何かのようです。神秘。
-現在、ApplicationDidEnterBackground で NSTimer の開始時刻の NSDate を保存し、タイマーを無効にして、タイマーを開始し、ApplicationWillEnterForeground で開始時刻を復元しています。まだ運がありません。
問題は、これが私のユーザーのごく一部に影響を与えているということです。つまり、すべての人にとって問題であるとは限らないため、混乱を招きます. もちろん、それはかなり不十分なバグなので、まだ修正したいと思っています-そして、私自身(iPhone 5で)に遭遇したので、必ずしも古いiPhoneのメモリ不足の何かまたは他の問題ではありません.
これは本当に私を驚かせました。私は調査を行い、スタックオーバーフローの質問をかなりよく調べましたが、私を助けるものはあまり見つけられないようです.
ご不明な点がございましたら、お気軽にお問い合わせください。