9

UNNotificationRequest オブジェクトの起動予定日を見つけようとしています。

保留中の通知リクエストを次のように取得しています。

UNUserNotificationCenter.current().getPendingNotificationRequests { (notifications) in

        let pendingNotifications : [UNNotificationRequest] = notifications
    }

次に、各 UNNotificationRequest オブジェクトの発火日にアクセスしようとしています。

以下のように UNNotificationTrigger にアクセスできますが、通知の予定された発火日にアクセスする方法が見つかりません。

let notification = pendingNotifications[indexOfNotification]
let trigger : [UNNotificationTrigger] = notification.trigger

以下のように、いくつかの通知の日付にアクセスできました。

let date = trigger.value(forKey: "date") as! Date

これは、UNUserNotificationCenter を使用してスケジュールされた通知に対して機能しますが、iOS 10 より前にスケジュールされた通知の日付にアクセスしようとすると、次のエラーが発生します。

キャッチされない例外 'NSUnknownKeyException' が原因でアプリを終了しています。理由: '[ valueForUndefinedKey:]: このクラスは、キー日付のキー値コーディングに準拠していません。

新しい通知と古い通知の両方をサポートする方法はありますか。

ありがとうございました。

4

1 に答える 1

15

通知の予定された発火日にアクセスする方法が見つかりません。

UNNotificationTrigger を取得する方法を理解していることはすでに示されています。UNNotificationTrigger は抽象スーパークラスです。それが実際にどのクラスであるかを調べて、そのクラスにキャストする必要があります。次に、そのプロパティを調べることができます。

例えば:

  • UNCalendarNotificationTrigger の場合は、UNCalendarNotificationTrigger にキャストします。今ではnextTriggerDate.

  • UNTimeIntervalNotificationTrigger の場合は、UNTimeIntervalNotificationTrigger にキャストします。今ではnextTriggerDate.

編集ただし、大きなバグがあることに注意してください。これが UNTimeIntervalNotificationTrigger の場合、nextTriggerDate間違っています。

于 2016-11-21T16:47:30.733 に答える