-1

I'm working on an app that gets events from a specific iOS calendar. When that calendar is empty however I, of course, get a fatal nil error.

let calendar = calendarWithTitle("Personal Trainer's Tool",
            type: EKCalendarTypeCalDAV,
            source: icloudSource!,
            eventType: EKEntityTypeEvent)

/* Create the predicate that we can later pass to the event store in order to fetch the events */
        let searchPredicate = eventStore.predicateForEventsWithStartDate(
            startDate,
            endDate: endDate,
            calendars: [calendar!])

/* Fetch all the events that fall between the starting and the ending dates */
        events = eventStore.eventsMatchingPredicate(searchPredicate) as [EKEvent] //Error on this line


if events.count == 0 {
                println("No events could be found")
            } else {

                // Go through all the events and print them to the console
                for event in events{
                    println("Event title = \(event.title)")
                    println("Event start date = \(event.startDate)")
                    println("Event end date = \(event.endDate)")
                }
            }

the 'calendar' in my searchPredicate is an EKCalendar as it should be, but I don't know how to check if it's empty before allowing the searchPredicate to execute to avoid the fatal error. Does anybody know how to solve this problem?

Thanks

Leighton
  • 6,559
  • 7
  • 21
  • 28

1 Answers1

0

You can use optional binding:

let calendar = calendarWithTitle("Personal Trainer's Tool",
    type: EKCalendarTypeCalDAV,
    source: icloudSource!,
    eventType: EKEntityTypeEvent)

/* Create the predicate that we can later pass to the event store in order to fetch the events */
let searchPredicate = eventStore.predicateForEventsWithStartDate(
    startDate,
    endDate: endDate,
    calendars: [calendar!])

/* Fetch all the events that fall between the starting and the ending dates */
if let events = eventStore.eventsMatchingPredicate(searchPredicate) as? [EKEvent] {


    if events.count == 0 {
        println("No events could be found")
    } else {

        // Go through all the events and print them to the console
        for event in events{
            println("Event title = \(event.title)")
            println("Event start date = \(event.startDate)")
            println("Event end date = \(event.endDate)")
        }
    }
}
NobodyNada
  • 7,529
  • 6
  • 44
  • 51