在iOS应用程序的后台设置提醒

时间:2016-02-14 00:44:33

标签: ios swift locationmanager ekeventstore

我正在尝试在用户进入某个区域时创建提醒。该代码适用于在应用程序打开时创建提醒。但是当我在应用程序处于后台时调用相同的代码时,我会遇到致命的错误:在展开Optional值时意外地发现了nil。下面的代码在AppDelegate中调用。

var eventStore: EKEventStore!
func locationManager(manager: CLLocationManager, didEnterRegion region: CLRegion) {
                let reminder = EKReminder(eventStore: self.eventStore) //This is where I get the error 
                let date = NSDate()
                reminder.title = "Do you have your bags?"
                let dueDateComponents = dateComponentFromNSDate(date.dateByAddingTimeInterval(Double(secondReminderStores) * 60.0))
                reminder.dueDateComponents = dueDateComponents
                reminder.calendar = self.eventStore.defaultCalendarForNewReminders()
                do {
                    try self.eventStore.saveReminder(reminder, commit: true)
                }catch{
                    print("Error creating and saving new reminder : \(error)")
                }

1 个答案:

答案 0 :(得分:0)

这一行:

var eventStore: EKEventStore!

...创建eventStore变量(属性)并设置其类型,但实际上并没有为其分配任何EKEventStore实例值。因此eventStorenil,因为这是任何未初始化的Optional的默认值。您没有显示曾为其分配任何EKEventStore实例值的其他代码。因此,当这一行出现时 nil

let reminder = EKReminder(eventStore: self.eventStore)

......所以你崩溃了。一切都非常好,整洁和合乎逻辑。