2017-10-14 6 views
1

例えばローカル通知を実行するにはどうすればよいですか? UNUserNotificationCenterには、繰り返し機能はありません。 おそらくNSTimerなどを使用していますか?私は「A」と「B」との間でx分ごとにいくつかのアクションを繰り返すp.m

let hours: [Int] = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24] 
    for hour in hours { 
     for minute in stride(from: 0, to: 60, by: 5){ 
      let content = UNMutableNotificationContent() 
      content.title = "Title" 
      content.body = "Body" 

      var dateComponents = DateComponents() 
      dateComponents.hour = hour 
      dateComponents.minute = minute 

      let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponents, repeats: true) 
      let request = UNNotificationRequest(identifier: "timerDone", content: content, trigger: trigger) 
      let center = UNUserNotificationCenter.current() 
      center.add(request) { (error : Error?) in 
       if let theError = error { 
        print(theError.localizedDescription) 
       } 
      } 

     } 
    } 
+0

をあなたは 'UNTimeIntervalNotificationTrigger'を使用して' UNNotificationCenter'で繰り返し通知をスケジュールすることができますが、あなたはそれがで繰り返し停止することを指定することはできません特定の時刻と別の時刻に再開します。 – Paulw11

+0

[Calendar](https://developer.apple.com/documentation/foundation/calendar)もオプションです。 – shallowThought

+0

なぜこのコードは5分ごとに通知を作成しませんか? 私は更新された答えを考慮に入れましたが、forループでUNCalendarNotificationTriggerを使用したい場合、通知を作成しません。 @ Paulw11 – Obarg

答えて

2

リピート機能がありますが、予想通り

はなぜ私のコードは動作しません。 Apple's documentationから

let content = UNMutableNotificationContent() 
content.title = NSString.localizedUserNotificationString(forKey: 
      "Hello!", arguments: nil) 
content.body = NSString.localizedUserNotificationString(forKey: 
      "Hello_message_body", arguments: nil) 

// Deliver the notification in five seconds and repeat it 
content.sound = UNNotificationSound.default() 
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 60, 
     repeats: true) 

// Schedule the notification. 
let request = UNNotificationRequest(identifier: "60_seconds", content: content, trigger: trigger) 
let center = UNUserNotificationCenter.current() 
center.add(request, withCompletionHandler: nil) 

編集:

としても、マニュアルに書かれて、あなたは確かに通知を投稿するユーザー権限を持っている必要があります:

let center = UNUserNotificationCenter.current() 
center.requestAuthorization(options: [.alert, .sound]) { (granted, error) in 
    // Enable or disable features based on authorization 
} 

結果:通知は毎分掲載されて

+0

私のコードがなぜ機能しないのか確認できますか? – Obarg

+0

「うまくいきません」というのは非常に有用な説明ではありません。私は試してみました、ここで期待どおりに動作します。更新された回答をご覧ください。 – shallowThought

+0

あなたは正しいです。期待通りに動作しませんでした。ありがとうございます – Obarg

関連する問題