我正在构建一个应用程序,允许用户在 iPhone 的日历本机应用程序中添加和创建事件。 我正在开发的功能之一是允许用户在 iPhone 的提醒本机应用程序中添加和创建项目。
据我所知,日历和提醒应用程序可与 EventKit 配合使用,并且从文档来看,每个应用程序的过程并没有太大差异。
我使用此代码来请求访问提醒的权限以及我用来将项目添加到应用程序的代码。
对于为什么它不起作用有什么想法吗? 预先感谢。
import Foundation
import EventKit
class EventModel {
let eventStore = EKEventStore()
func requestAccessForReminders() {
let status = EKEventStore.authorizationStatus(for: .reminder)
if status == .authorized {
print("EKEventStore access for Reminders already granted.")
} else {
eventStore.requestFullAccessToEvents { success, error in
if success && error == nil {
print("EKEventStore access for Reminders has been granted.")
} else {
print("EKEventStore access for Reminders request failed with error: \(error?.localizedDescription ?? "Unknown error")")
}
}
}
}
func addEventToReminders(title: String, startHour: Int, startMinute: Int, duration: Int) -> Void {
let newEvent = EKReminder(eventStore: self.eventStore)
newEvent.title = title
newEvent.calendar = self.eventStore.defaultCalendarForNewReminders()
do {
try eventStore.save(newEvent,
commit: true)
} catch let error {
print("Reminder failed with error \(error.localizedDescription)")
}
}
}
这是我在 info.plist 中的信息。 (我知道是相同的消息,但这不应该是主要原因,对吧?)
如果您使用
print
查看保存前的行为,您可能会发现:
print ("defaultCalendarForNewReminders",eventStore.defaultCalendarForNewReminders() as Any)
显示:
defaultCalendarForNewReminders nil
您应该检查
defaultCalendarForNewReminders
,因为它可以为空,但 .calendar 不能为空。
func defaultCalendarForNewReminders() -> EKCalendar?
var calendar: EKCalendar! { get set }
https://developer.apple.com/documentation/eventkit/ekcalendaritem/1507169-calendar
如果您使用的是干净的模拟器,则
nil
来自应用程序被授予权限之前的检查。获得权限后,您会看到类似这样的内容:
defaultCalendarForNewReminders Optional(EKCalendar <0x60000212af80> {title = Reminders; type = Local; allowsModify = YES; color = #007AFFFF;})
即使 Reminders.app 从未运行过。