代码之家  ›  专栏  ›  技术社区  ›  Leighton

在EKEventStore中创建EKCalendar-Swift

  •  2
  • Leighton  · 技术社区  · 10 年前

    我正在尝试在我的应用程序首次运行时在EKEventStore中创建一个日历。我找到了 this tutorial 但我对Objective-C的了解还不够,无法将其翻译成Swift,而且根据我所做的研究,我想知道这种方法在ios8中是否仍然可行。

    1 回复  |  直到 10 年前
        1
  •  3
  •   Samaga    10 年前

    尝试(请注意,这是一种提醒类型,但如果需要,您可以更改类型):

    let eventStore = EKEventStore()
    var yourReminderCalendar: EKCalendar?
    
    func retrieveYourCalendar() {
        let calendars = eventStore.calendarsForEntityType(EKEntityTypeReminder)
    
        if(yourReminderCalendar == nil) {
            for calendar in calendars {
                if calendar.title == "Your Title" {
                    yourReminderCalendar = (calendar as EKCalendar)
                    break
                }
            }
    
            if(yourReminderCalendar == nil) {
                yourReminderCalendar = EKCalendar(forEntityType: EKEntityTypeReminder, eventStore: eventStore)
                yourReminderCalendar!.title = "Your Title"
                yourReminderCalendar!.source = eventStore.defaultCalendarForNewReminders().source
                var error: NSError?
    
                if(eventStore.saveCalendar(yourReminderCalendar, commit: true, error: &error)) {
                    println("reminder cal saved")
                }
                else {
                    //HANDLE REMINDER ERROR
                }
            }
        }
    }
    

    您需要检查授权:

        func verifyUserEventAuthorization() {
        switch EKEventStore.authorizationStatusForEntityType(EKEntityTypeReminder) {
        case .Authorized:
            ...
        case .Denied:
            ...
        case .NotDetermined:
            eventStore.requestAccessToEntityType(EKEntityTypeReminder, completion:
                { [weak self](granted: Bool, error: NSError!) -> Void in
                    if granted {
                        ...
                    }
                    else {
                       ...
                    }
            })
        case .Restricted:
            ...
        }
    }