EKEventStore 最新使用大全

1.配置info.plist

与其他私有内容一样,第一步是配置Info.plist然后请求访问。
要保存事件,您需要添加密钥NSCalendarsUsageDescription并Info.plist解释为什么需要访问日历。

2.引入EventKit

image.png

3.获取权限

granted 只代表是否 授权


image.png

同时也提供了获取用户授权状态的api, 不会触发授权弹窗


image.png

4.创建event

   let event = EKEvent(eventStore: eventStore)
    event.title = "Workout for Women: Workout Reminder"
    event.location = "Good things come to those who sweat. All it takes is 7 minutes!"
    event.startDate = startDate
    event.endDate = startDate
    event.calendar = calendar
    event.url = URL(string: calendarOpenUrl)
    event.addAlarm(.init(relativeOffset: 1))
    event.addRecurrenceRule
       do {
        try eventStore.save(event, span: .thisEvent, commit: true)
        userSave(key: caldendarLastDate, value: realHourAndMinDate)
        eventIdenti = event.eventIdentifier
    } catch {
        print(error)
    }

url通过点击唤起本地app
alarm 设置时间到了是否有提示
startdate 开始的时间
addRecurrenceRule: 给这个event添加循环, 如果循环内 不包括现在的日期, 那么这个event。也会设置
eventIdentifier: 只能获取, 可以存储到本地, 删除的时候可以删除指定eventIdentifier的 event


image.png

5.删除

批量删除,获取到对应的时间节点, 然后批量删除特定的event,当event删除过多的时候会很耗时
也可以根据特定的eventid 进行删除
 let endDate = Calendar.current.date(bySettingHour: 23, minute: 59, second:   59, of: Date().endOfWeek) ?? Date()
        let predicate = eventStore.predicateForEvents(withStart: Date().startOfWeek, end: endDate, calendars: nil)
        for item in eventStore.events(matching: predicate) {
            if item.url?.absoluteString == calendarOpenUrl {
                try? eventStore.remove(item, span: .thisEvent, commit: true)
            }
        }

你可能感兴趣的:(EKEventStore 最新使用大全)