【问题标题】:save EKEvent to Calendar and store event.identifier to Realm database将 EKEvent 保存到 Calendar 并将 event.identifier 存储到 Realm 数据库
【发布时间】:2020-10-22 16:01:45
【问题描述】:

我正在开发一个在日历中创建事件并将 eventIdentifier 保存在 Realm DB 中以供以后参考的项目:

 func createCal(eventName: String?, eventDate:Date?) -> String {
    var eventId = ""
    let eventStore:EKEventStore = EKEventStore()
    eventStore.requestAccess(to: .event) { (granted, error) in
        if (granted) && (error == nil) {
            //                            print("granted\(granted)")
            //                            print("error\(error)")
            
            let event:EKEvent = EKEvent(eventStore: eventStore)
            event.title = eventName
            event.startDate = eventDate
            event.endDate = event.startDate.addingTimeInterval(3600)
            let remider1 = EKAlarm(relativeOffset: -86400)
            let remider2 = EKAlarm(relativeOffset: -172800)
            event.alarms = [remider1, remider2]
            event.notes = "Eveniment autogenerat de aplicatia CARMem"
            event.calendar = eventStore.defaultCalendarForNewEvents
            do {
                try eventStore.save(event, span: .thisEvent, commit: true)
                eventId = event.eventIdentifier
   
            }catch let error as NSError {
                print("error\(error)")
            }
            print("Event Saved")
        }else{
            print("error\(String(describing: error))")
        }
    }
    return eventId
}

并且该函数在领域中被调用写例程女巫附加到一个按钮:

@IBAction func savePressed(_ sender: UIButton) {
    if let currentCategory = selectedCategory.self {EKEventStore.authorizationStatus(for: .event)
       
        do {
            try realm.write{
                let newEveniment = Eveniment()
                newEveniment.title = typeTextField.text! // sa vedem
                newEveniment.date = finalDate
                let al1Input = Int(al1TextField.text ?? "30")
                let al2Input = Int(al2TextField.text ?? "15")
                newEveniment.alert1 = al1Input ?? 30
                newEveniment.alert2 = al2Input ?? 15
                newEveniment.calendarID = createCal(eventName: typeTextField.text, eventDate: finalDate)
                print("event salavat in db:\(newEveniment.calendarID)")
                currentCategory.sofetEveniment.append(newEveniment)
                realm.add(newEveniment)
            }
        }catch{
            print("Eroare la salvarea evenimentului \(error)")
        }           
    }

对于我的生活,我不明白为什么返回的 eventId var 是 nil。 我尝试了无数关于堆栈溢出的解决方案,但似乎没有任何效果。

任何帮助/指针将不胜感激。

【问题讨论】:

    标签: ios swift realm eventkit ekeventkit


    【解决方案1】:

    您可以在实际将事件保存到日历时获取 EKEvent 标识符。

    例如:

    public func eventEditViewController(_ controller: EKEventEditViewController, didCompleteWith action: EKEventEditViewAction) {
       controller.dismiss(animated: true, completion: nil)
       switch action {
       case .saved:
          print("Event created: \(controller.event?.eventIdentifier)")
          break
       default:
          break
        }
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-21
      • 1970-01-01
      • 1970-01-01
      • 2017-06-16
      • 1970-01-01
      • 1970-01-01
      • 2018-11-17
      相关资源
      最近更新 更多