Khadija Daruwala
Khadija Daruwala

Reputation: 1205

Add Event to Calendar in iOS8 with Swift

I am new to swift and i am practicing "Adding a Calendar Event" from this website: http://www.ioscreator.com/tutorials/add-event-calendar-tutorial-ios8-swift, but I am getting the following errors at line

 let result = store.saveEvent(event, span: .ThisEvent, commit: error)

Code:

import UIKit
import EventKit

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        let eventStore = EKEventStore()
        switch EKEventStore.authorizationStatusForEntityType(EKEntityType.Event) {
        case .Authorized:
            insertEvent(eventStore)
        case .Denied:
            print("Access denied")
        case .NotDetermined:
            // 3
            eventStore.requestAccessToEntityType(EKEntityType.Event, completion:
                {[weak self] (granted: Bool, error: NSError?) -> Void in
                    if granted {
                        self!.insertEvent(eventStore)
                    } else {
                        print("Access denied")
                    }
                })
        default:
            print("Case Default")
        }

    }

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

    func insertEvent(store : EKEventStore){
        let calendars = store.calendarsForEntityType(EKEntityType.Event) as! [EKCalendar]
        for calendar in calendars{
            if calendar.title == "ioscreater"{
                let startDate = NSDate()
                let endDate = startDate.dateByAddingTimeInterval(2*60*60)
                //Create event
                var event = EKEvent(eventStore : store)
                event.calendar = calendar
                event.title = "New Meeting"
                event.startDate = startDate
                event.endDate = endDate
                //Save event in Calendar
                var error : NSError?
                let result = store.saveEvent(event, span: .ThisEvent, commit: error)
                if result == false{
                    if let theError = error{
                        print ("An error occured \(theError)")
                    }
                }
            }

        }

    }

}

I googled the errors but I could not find an appropriate solution.

Upvotes: 1

Views: 5459

Answers (3)

ThetNaing Mizo
ThetNaing Mizo

Reputation: 4089

This works for me in Swift 3.0

Firstly, You need to add "Privacy - Calendars Usage Description" in info.plist.

import EventKit

func addEventToCalendar(title: String, description: String?, startDate: Date, endDate: Date, completion: ((_ success: Bool, _ error: NSError?) -> Void)? = nil) {

     let eventStore = EKEventStore()

     eventStore.requestAccess(to: .event, completion: { (granted, error) in
        if (granted) && (error == nil) {
           let event = EKEvent(eventStore: eventStore)
           event.title = title
           event.startDate = startDate
           event.endDate = endDate
           event.notes = description
           event.calendar = eventStore.defaultCalendarForNewEvents
           do {
               try eventStore.save(event, span: .thisEvent)
           } catch let e as NSError {
               completion?(false, e)
               return
           }
           completion?(true, nil)
        } else {
           completion?(false, error as NSError?)
        }
    }) 
}

Then, you can easily call this method like the following:

addEventToCalendar(title: "Best friend birthday", description: "Remember you or miss you!", startDate: NSDate(), endDate: NSDate())

Thanks and enjoy coding!!!

Upvotes: 1

Bhoomi Jagani
Bhoomi Jagani

Reputation: 2423

Add saveEvent code in try,catch like below :

      do {
         try store.saveEvent(event, span: .ThisEvent)
                } catch let err as NSError{
                     print ("An error occured \(err.description)")
                }

Upvotes: 0

CodeBender
CodeBender

Reputation: 36610

func insertEvent(store : EKEventStore){
    let calendars = store.calendarsForEntityType(EKEntityType.Event)
    for calendar in calendars{
        if calendar.title == "ioscreater"{
            let startDate = NSDate()
            let endDate = startDate.dateByAddingTimeInterval(2*60*60)
            //Create event
            var event = EKEvent(eventStore : store)
            event.calendar = calendar
            event.title = "New Meeting"
            event.startDate = startDate
            event.endDate = endDate
            //Save event in Calendar
            do {
                try store.saveEvent(event, span: .ThisEvent)
            } catch {
                // Do error stuff here
            }
        }

Upvotes: 1

Related Questions