2017-01-20 13 views
3

私の目標は、N秒後に最初に発生する通知を設定し、次にN秒ごとに繰り返すことです。即座にローカル通知がトリガーされる - 延期する方法?

ただし、繰り返し通知を作成すると、すぐにUNUserNotificationCenterDelegateがトリガーされるようです。

アプリケーションデリゲート:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
    let center = UNUserNotificationCenter.current() 
    center.delegate = self 
    return true 
} 

func startRequest() { 
    let content = UNMutableNotificationContent() 
    content.body = bodyText 
    content.categoryIdentifier = categoryIdentifier 
    content.sound = UNNotificationSound.default() 

    let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 60, repeats: true) 
    trigger.nextTriggerDate() 
    let request = UNNotificationRequest(identifier: UUID().uuidString, content: content, trigger: trigger) 

    let center = UNUserNotificationCenter.current() 
    center.add(request) 
} 

func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { 
    // This callback received right after the request is made 
    completionHandler([.alert, .sound]) 
} 

私は非繰り返し通知を作成し、それが期限切れになったときに通知を繰り返し起動することによってこの問題を回避することができます。しかし、私は最初のトリガの日付を指定する方法があることを期待していました。メモリが正しく機能するなら古い通知APIにこの機能があり、おそらく私はこの新しいAPIを誤解しています。

ありがとう!

+2

それはバグかもしれません。私は以前に尋ねられたこの質問を見ました。 – matt

+0

ここにアイデアがあります。 600のようにはるかに大きな間隔で試してみてください。 – matt

+0

@mattそれでも非常に大きな間隔で起動します –

答えて

0

UNMutableNotificationContent()にタイトルを設定していない可能性があります。

content.title = "Title goes Here" 

また、リクエストを追加する際にエラーが発生したかどうかを確認するには、次のコードを追加します。

center.add(request) { (error : Error?) in 
    if let theError = error { 
    // Handle any errors 
    } 
} 

私はAppleのドキュメントからこれを得た - https://developer.apple.com/reference/usernotifications/unmutablenotificationcontent

+0

タイトルを設定しようとしましたが、何も影響していないようです。また、エラーが発生していないようです。 –

関連する問題