0

私のプロジェクトには、UILabelsや変数などの値を変更する必要があるメインビューコントローラーが1つあります。

また、ユーザーが最初にアプリを開いたらすぐにタイマーを常に実行する必要があります。

私が現在持っているのはタイマーです。タイマーは、毎分、appdelegateの関数を呼び出します。その関数にある場合、ifステートメントで深夜を検出します。真夜中になると、メインビューコントローラーの一連の値をリセットしたいと思います。

したがって、ユーザーが初めてアプリを開いたらすぐに、このタイマーを再度実行する必要があります。完全に閉じたとき、およびバックグラウンドで、たとえばユーザーがホームボタンを押して閉じなかったときに実行する必要があります。

私の主な質問は、これのためにappdelegateで使用することになっている機能は何ですか?現在、タイマーはxcodeでタスク/アプリを完全に閉じて戻った後にのみ起動するようです。その後、値がリセットされます。単にシミュレーターで家に帰るときではありません。

後で、これらのニーズを一時的に回避して、タイマーから深夜関数を起動させても、メインVCにいるときは、UILabelなどの値がリセットされないことがわかりました...それでも私がそこに置いたアラートのために、コードのセクションが起動しています。

したがって、ここでの私の質問は、ユーザーがアプリにアクティブにいるとき、たとえば深夜に、そしてアプリにいないときに値を変更できるようにするために、どの関数の下で、真夜中の関数を入れることになっているのかということです。アプリが実行されていないときでも、1時間または1分ごとに深夜機能をトリガーするタイマーが必要です。実際に実行者が深夜にヒットしたときは、それぞれをメインVCに入れて値をリセットし、ユーザーが最終的に実行するようにします。アプリを開いてそのメインVCをロードすると、これらの値がリセットされます。

基本的に、ユーザーは1日を通していくつかの数値を追跡しており、深夜になるとそれらの数値はリセットされるため、ユーザーがその日にアプリを開くと、0が表示されます。

ありがとう。

4

1 に答える 1

1

自分のタイマーで真夜中を追跡しないでください。通知UIApplicationSignificantTimeChangeNotificationを観察して追跡します。これにより、タイムゾーンが後ろで変わったときや、真夜中が近づいたときなど、あらゆる種類の重要なケースが自動的に処理されます。

バックグラウンドでの時間変化の追跡に関しては、ユースケースでこれを行う理由はありません。でapplicationDidEnterBackground:、今何時かをメモします。でapplicationWillEnterForeground:、今何時か確認してください。真夜中の境界を越えた場合は、値を設定します。

于 2013-01-07T00:50:42.703 に答える