在iOS 10中推迟本地通知

时间:2017-04-09 18:13:10

标签: ios swift

我有本地通知,我添加了一个操作。如何点击操作,15分钟后再次触发本地通知?

以下是代码和扩展名,以便可以使用UIImage显示通知:

extension UNNotificationAttachment {

    static func create(identifier: String, image: UIImage, options: [NSObject : AnyObject]?) -> UNNotificationAttachment? {
        let fileManager = FileManager.default
        let tmpSubFolderName = ProcessInfo.processInfo.globallyUniqueString
        let tmpSubFolderURL = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(tmpSubFolderName, isDirectory: true)
        do {
            try fileManager.createDirectory(at: tmpSubFolderURL, withIntermediateDirectories: true, attributes: nil)
            let imageFileIdentifier = identifier+".png"
            let fileURL = tmpSubFolderURL.appendingPathComponent(imageFileIdentifier)
            guard let imageData = UIImagePNGRepresentation(image) else {
                return nil
            }
            try imageData.write(to: fileURL)
            let imageAttachment = try UNNotificationAttachment.init(identifier: imageFileIdentifier, url: fileURL, options: options)
            return imageAttachment
        } catch {
            print("error " + error.localizedDescription)
        }
        return nil
    }
}


func scheduleNotification() {
    removeNotification()
    if shouldRemind && dueDate > Date() {
        let content = UNMutableNotificationContent()
        content.title = "Reminder:"
        content.body = text
        content.sound = UNNotificationSound.default()
        let calendar = Calendar(identifier: .gregorian)
        let components = calendar.dateComponents([.month, .day, .hour, .minute], from: dueDate)
        let trigger = UNCalendarNotificationTrigger(dateMatching: components, repeats: false)
        let identifier = ProcessInfo.processInfo.globallyUniqueString
        if let attachment = UNNotificationAttachment.create(identifier: identifier, image: notificationImage, options: nil) {
            content.attachments = [attachment]
        }
        let action = UNNotificationAction(identifier: "remindLater", title: "Remind me later", options: [])
        let category = UNNotificationCategory(identifier: "category", actions: [action], intentIdentifiers: [], options: [])
        UNUserNotificationCenter.current().setNotificationCategories([category])
        content.categoryIdentifier = "category"
        let request = UNNotificationRequest(identifier: "\(itemID)", content: content, trigger: trigger)
        let center = UNUserNotificationCenter.current()
        center.add(request)
    }
}

1 个答案:

答案 0 :(得分:0)

当用户激活操作时,只需在操作处理程序中再次调用修改后的版本scheduleNotification。我肯定会创建一个函数变量TimeInterval或布尔值来确定通知的触发时间。

相关问题