2017-10-25 13 views
0

、ユーザーが自分のデータを自分のスケジュールに応じて、いずれかの午前3時、または午後3時、毎日クリアするように選択することができます。私は確実にこれを行う方法を探しています。実行コード24時間ごとに、私のアプリの設定ページでのみ、特定の時間の後

これまでのところ、インストール時に1970年1月1日以降に秒を保存しようとしていましたが、アプリが開かれるたびに1970年以降の現在の秒数を取得して比較して、 24時間です。そうであれば、私はデータをクリアし、保存された秒をクリアの時間で置き換え、もしそうでなければ何もしません。これは、最後のクリアから24時間以上経過していればデータを消去したいと思っていたのですが、本当にやりたいことは、過去のユーザーが時間を設定していればクリアされていることです。その日に完成しました。例えば

  • アプリは午後6時に月21日に設置され、ユーザーはそれが&時間が満たしているか、過去の5月22日である現在のデータ限りクリアする必要があり、入力データに開始されますされている場合、午前3時に24時間ロジックは、日時が5月22日午後6時に満たされるまでクリアされません。

これを達成することができる方法上の任意の考え?

+0

86400秒は24時間ですが、午前3時から午前3時の間は翌日は必ずしも24時間ではありません。それはあなたの状況に関係ないかもしれません。 –

+0

連続した日に午前3時から午前86400秒はどうしてですか?同じ時間に毎日24時間はありませんか? –

+0

No.その期間に夏時間(米国の夏時間)が開始または終了したらどうなりますか?それは23時間または25時間になる可能性があります。また、時々起こるうるう秒があればどうしますか? –

答えて

0

(ユーザーがフォアグラウンドでアプリを持っている場合はプッシュ通知/ローカルの通知/または簡単なチェックで)さて私はあなたがそれを処理することを計画しているかどうかはわかりません

しかし、私は地元を作成します通知:

let notification = UILocalNotification() 
notification.fireDate = Date().addingTimeInterval(86400) 
UIApplication.sharedApplication().scheduleLocalNotification(notification) 

通知を処理し、24時間後にもう一度通知をリセットします。あなたは、ユーザーが考える、あるいはアプリを開くために必要とせずに、データごとに24時間をクリアすることができるだろうと

サイレントプッシュ通知は、いいだろう。しかし、これらの通知をデバイスに送信するためのバックエンドロジックが必要になります。リセット時間を午前3時または午後3時に制限しているので、実装するのは恐ろしいことではないと思います。

30秒の実行時間に制限されています。また、アプリケーションが中断された場合にのみサイレント通知が完了し、ユーザーによってアプリケーションが終了された場合には、デリゲートメソッドが呼び出されません。

--Edit--

プッシュ通知が....私はあなたがこれは(そのことについて申し訳ありません)、アプリ起動時に起こるしたかったと言っ一部を見逃している必要があり、このために少しくらいだろう

この日付しかし、あなたはそれがあなたのチェックは、データを削除し合格した場合、その後アプリの負荷に、現在の日付に保存された日付を比較し、希望

func dateByAddingDays(_ daysToAdd: Int) -> Date { 
    let calendar = Calendar.current 
    var days = DateComponents() 
    days.day = daysToAdd 
    return (calendar as NSCalendar).date(byAdding: days, to: self, options: []) 
} 

割引:

あなたはDateクラスへの拡張を書くことができます。ここで日数を使用する必要はありません。var hours = DateComponents() - >hours.hour = hoursToAdd

+0

ユーザーがアプリを開いたときにのみこれを動作させる必要があります。最後のクリアが5月22日の午前3時に行われ、5月30日の午後4時に開かれるように、コードをクリアして実行する必要があることを認識する必要があります。私はプッシュ通知がこれについて少し残忍であると思いますか?思考? –

関連する問題