Ошибка получения нового календаря для новых напоминаний

Я пытаюсь добавить функцию в свое приложение, чтобы пользователь мог получить список напоминаний, используя следующий метод.

Следующий метод является основным методом, который я использую для получения напоминаний:

func getReminders(){

    var eventStore : EKEventStore = EKEventStore()    
    // This lists every reminder
    var calender = getCalender(eventStore)
    let calendars = eventStore.calendarsForEntityType(EKEntityTypeReminder)
        as! [EKCalendar]

    //cals.append(calender)
    var predicate = eventStore.predicateForRemindersInCalendars([calender])
    eventStore.fetchRemindersMatchingPredicate(predicate) { reminders in
        for reminder in reminders {
            println(reminder.title)

            self.remindersTitles.append(reminder.title!!)
        }}
    var startDate=NSDate().dateByAddingTimeInterval(-60*60*24)
    var endDate=NSDate().dateByAddingTimeInterval(60*60*24*3)
    var predicate2 = eventStore.predicateForEventsWithStartDate(startDate, endDate: endDate, calendars: nil)

    println("startDate:\(startDate) endDate:\(endDate)")
    var eV = eventStore.eventsMatchingPredicate(predicate2) as! [EKEvent]!

    if eV != nil {
        for i in eV {
            println("Title  \(i.title!)" )
            println("stareDate: \(i.startDate)" )
            println("endDate: \(i.endDate)" )
        }
    }
}

Как вы заметили, я создаю календарь и присваиваю ему возвращаемое значение метода getCalender:

func getCalender(store: EKEventStore) -> EKCalendar {
    let defaults = NSUserDefaults.standardUserDefaults()
    if let id = defaults.stringForKey("GSCalender") {
        return store.calendarWithIdentifier(id)
    } else {
        var calender = EKCalendar(forEntityType: EKEntityTypeReminder, eventStore: store)
        calender.title = "Genie Sugar Calender!"
        calender.CGColor = UIColor.redColor().CGColor
        calender.source = store.defaultCalendarForNewReminders().source!
        var error: NSError?

        store.saveCalendar(calender, commit: true, error: &error)

        if error == nil {
            defaults.setObject(calender.calendarIdentifier, forKey: "GSCalender")
        }

        if calender == nil {
            println("nothing here")
        }
        return calender
    }
}

Но проблема в том, что приложение застревает на этой строке второго метода:

calender.source = store.defaultCalendarForNewReminders().source!

И возвращает мне эту ошибку:

Ошибка получения календаря по умолчанию для новых напоминаний: Error Domain=EKCADErrorDomain Code=1013 «Операция не может быть завершена.

Любые идеи, пожалуйста, чтобы преодолеть эту проблему? с моей благодарностью


person Ali Alhamaly    schedule 07.06.2015    source источник
comment
У меня такая же проблема.   -  person Lucas Huang    schedule 24.07.2015
comment
возможный дубликат Создание EKCalendar в EKEventStore — Swift   -  person Eric Aya    schedule 15.08.2015


Ответы (2)


Я заметил, что симулятор iPhone после сброса возвращает nil для store.defaultCalendarForNewReminders(). Я считаю, что это ошибка симулятора.

person mark    schedule 04.11.2017

Проведя множество тестов, я пришел к выводу, что симуляторы могут плавно извлекать defaultCalendarForNewReminders() (с разрешением на использование календаря)... но с включенным тестированием реальное устройство с iOS 14.6 возвращает ноль, даже у iPhone уже есть календарь по умолчанию для событий!

Я также пытался использовать EKCalendarChooser для выбора других календарей, но это не сработало! Так что я думаю, что это ошибка iOS.

person Kathan Lunagariya    schedule 13.07.2021