2016-12-07 22 views
0

私のアプリケーションでは、to-doオブジェクトの配列があります。そして、ある日の毎日、13 PMと言うと、to-doオブジェクトの配列を変更する必要があります。 毎日このイベントをトリガするためにどのような機能を使用できますか?特定の時刻に毎日特定の値をリセットする

+0

webservicesを使用している間にサーバー上で設定されたcronジョブを実行できます –

+0

これまでのWebサービスは使用していません。インターネットに接続しなくても値をリセットしたいです。 – Misha

+0

ok!私はiosの開発者ではありませんが、iosとcronの仕事に使用されるwebservicesに取り組んでいます。サーバーには、日付時刻のイベントをトリガーすることができます。 –

答えて

2

アプリがフォアグラウンドにあるとき、特定の時間のしきい値が経過すると、タイマーを起動するように設定できます。 時間が経過してアプリがバックグラウンドにある場合は、しきい値を超えた場合にアプリの次回の起動を確認してから、その時点で修正を行うことができます。例えば

、あなたのAppDelegateでこれを追加するタイマーを追加する:

private var myTimer: Timer? 

func applicationWillResignActive(_ application: UIApplication) { 
    myTimer?.invalidate() 
} 

func applicationDidBecomeActive(_ application: UIApplication) { 
    //Scheduling for 1 PM (13:00) 
    var dateComponents = Calendar.current.dateComponents([.minute, .hour, .month, .day, .year], from: Date()) 
    dateComponents.hour = 13 
    dateComponents.minute = 00 
    dateComponents.timeZone = TimeZone.current 

    if let timerDate = Calendar.current.date(from: dateComponents) { 
     myTimer = Timer(fireAt: timerDate, interval: 0, target: self, selector: #selector(timerFired), userInfo: nil, repeats: false) 
    } 

    if let myTimer = myTimer { 
     RunLoop.current.add(myTimer, forMode: RunLoopMode.commonModes) 
    } 
} 

func timerFired() { 
    //Do you update here 
} 

あなたの修正が既に場合には、その日のために行われているかどうかをチェックするapplicationDidBecomeActive方法で追加のチェックを追加することができますアプリがバックグラウンドまたは非アクティブになっている間は、しきい値は過ぎます。

+0

実際、あなたが言ったように、私はUserオブジェクトがUserDefaultsでアクセスされるたびにDateオブジェクトを設定しています。その後、私は、新しいアクセス日がuserDefaultsのlastDateと同じ日である場合にアプリケーションを再オープンするたびにチェックし、同じ日でないときにオブジェクトを実行するように変更します。今すぐうまくいく!! – Misha

関連する問題