2016-04-05 20 views
0

現在歩いている歩数をカウントし、ゴールで確認し、満たしていればローカル通知をリリースするアプリを作っています。 私はローカルの通知を設定しましたが、その瞬間に一度だけトリガーする必要があります。私は、これはdispatch_once_tを通じて取り組んだ:iOSローカル通知のトリガー処理

if stepsData >= stepsGoalData { 
      let localNotification = UILocalNotification() 
      UIApplication.sharedApplication().scheduleLocalNotification(localNotification) 
      localNotification.fireDate = NSDate() 
      localNotification.alertBody = "Acheived" 
      localNotification.soundName = UILocalNotificationDefaultSoundName 
    } 

しかし、ユーザーがstepsGoalDataが増加した場合、現在のコードが通知をトリガーしない場合には誰かがこの事件を処理するためのアイデアを私に提供してもらえますか?ありがとうございました!

+0

なぜあなたは 'dispatch_once'を追加しましたか?どのような問題が正確に解決しましたか? – Wain

+0

現在のところ、歩数計のデータが不可能な2つの値を正確に比較していることに気付きました。ですから、データを比較するには> =を使用しなければなりません。dispatch_onceを追加しないと、継続的に通知が生成されていました。私もこれを処理するためのより良い方法があるかもしれないと思うが、私は見つけることができませんでした:( – Alakh

+0

あなたは今、あなたの質問にその最後の編集を元に戻す必要があります意味がない... – Wain

答えて

1

したがって、実際に通知するかどうかのチェックを変更するだけで、カウントだけでなく通知が行われたかどうかを示すフラグも考慮する必要があります。これはあなたのstepsGoalDataの横に定義された単純なBoolのようなものです。

今、あなたのチェックは次のようになります。

if stepsData >= stepsGoalData && !hasNotified { 
    hasNotified = true 
    ... 

そして、あなたはあなたにもhasNotified = falseを設定し、新たな目標値にstepsGoalDataを設定します。

+0

そして削除ディスパッチラインコード? – Alakh

+0

確かに、それ以外の場合は、アプリケーションがメモリから削除されるまで、再び動作しません – Wain

+0

私はあなたがここで説明しようとしたことを理解し、 – Alakh

関連する問題