在iOS Swift中设置提醒

时间:2015-07-05 21:53:46

标签: ios swift ekeventstore

我试图在我的swift应用程序中设置一个简单的EKReminder来提醒用户赶上总线。但是,当我尝试保存提醒时,我总是收到错误(没有报告错误,应用程序崩溃)。我有以下代码。

public class func createReminder(reminderTitle: String, timeInterval:      NSDate) {
    var calendarDatabase = EKEventStore()

    calendarDatabase.requestAccessToEntityType(EKEntityTypeReminder,
        completion: nil)

    let reminder = EKReminder(eventStore: calendarDatabase)

    reminder.title = reminderTitle

    let alarm = EKAlarm(absoluteDate: timeInterval)

    reminder.addAlarm(alarm)

    reminder.calendar = calendarDatabase.defaultCalendarForNewReminders()

    var error: NSError?

    calendarDatabase.saveReminder(reminder, commit: true, error: &error)
}

3 个答案:

答案 0 :(得分:2)

以下内容应在Swift 4.2

中起作用
func AddReminder() {

 eventStore.requestAccess(to: EKEntityType.reminder, completion: {
  granted, error in
  if (granted) && (error == nil) {
    print("granted \(granted)")


    let reminder:EKReminder = EKReminder(eventStore: self.eventStore)
    reminder.title = "Must do this!"
    reminder.priority = 2

    //  How to show completed
    //reminder.completionDate = Date()

    reminder.notes = "...this is a note"


    let alarmTime = Date().addingTimeInterval(1*60*24*3)
    let alarm = EKAlarm(absoluteDate: alarmTime)
    reminder.addAlarm(alarm)

    reminder.calendar = self.eventStore.defaultCalendarForNewReminders()


    do {
      try self.eventStore.save(reminder, commit: true)
    } catch {
      print("Cannot save")
      return
    }
    print("Reminder saved")
  }
 })

}

info.plist也需要适当的隐私设置。 enter image description here

答案 1 :(得分:0)

我以前没有使用过这样的东西,但是看看你的代码,我可以看到你调用requestAccessToEntity - 方法,而不处理响应。该方法很可能会向用户显示提示,要求他们接受您的应用有权访问"提醒"。使用您的代码,您需要获得许可,但代码的其余部分将在询问后立即执行,而不会等待'为了回应。第一次运行此代码时,将询问用户,并且您的提醒将被拒绝,因为它会立即尝试保存。 即使您的用户点击了"允许",您的代码也已经未经许可运行。

现在,如果用户点击允许一次,然后尝试再次执行相同操作,那么也许它会起作用,我不知道。但是,如果您的用户点击了"取消"在提示符下,您的代码将永远无法运行,直到他们进入“设置”并允许您的应用显示提醒。

在您知道用户是否允许之前,您不应该创建提醒,因此您应该将此功能分成两个单独的功能。并且不要在nil中传递completion该函数;处理回应。

答案 2 :(得分:-1)

尝试以下方法:

EKEntityTypeReminder -> EKEntityType.Reminder
相关问题