Swift 3创建提醒EKEventStore

问题描述:

我想将提醒保存到默认提醒位置。但是,当我按下按钮,我得到一个致命错误:意外发现零而展开的可选值...我很新的这一点,我找到的大多数例子过于复杂或者不斯威夫特3.Swift 3创建提醒EKEventStore

class ViewController: UIViewController { 

var eventStore: EKEventStore? 

@IBOutlet weak var reminderText: UITextField! 

@IBAction func setReminder(_ sender: Any) { 

    let reminder = EKReminder(eventStore: self.eventStore!) 

    reminder.title = "Go to the store and buy milk" 
    reminder.calendar = (eventStore?.defaultCalendarForNewReminders())! 

    do { 
     try eventStore?.save(reminder, 
          commit: true) 
    } catch let error { 
     print("Reminder failed with error \(error.localizedDescription)") 
    } 

    } 
} 

作为一段简单的代码,我想我会在为未来的更新换代后找到答案。我总是喜欢简单的例子。

import UIKit 
import EventKit 

class ViewController: UIViewController { 

var eventStore = EKEventStore() 
var calendars:Array<EKCalendar> = [] 

// Not used at this time 
@IBOutlet weak var reminderText: UITextField! 

@IBAction func setReminder(_ sender: Any) { 


    let reminder = EKReminder(eventStore: self.eventStore) 

    reminder.title = "Go to the store and buy milk" 
    reminder.calendar = eventStore.defaultCalendarForNewReminders() 

    do { 
     try eventStore.save(reminder, 
          commit: true) 
    } catch let error { 
     print("Reminder failed with error \(error.localizedDescription)") 
    } 

} 



override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

    // get permission 
    eventStore.requestAccess(to: EKEntityType.reminder, completion: 
     {(granted, error) in 
      if !granted { 
       print("Access to store not granted") 
      } 
    }) 

// you need calender's permission for the reminders as they live there 
    calendars = eventStore.calendars(for: EKEntityType.reminder) 

    for calendar in calendars as [EKCalendar] { 
     print("Calendar = \(calendar.title)") 
    } 

} 


override func viewWillAppear(_ animated: Bool) { 
} 



override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 


}