EKEventViewController 不会在 iOS 13 上显示编辑按钮

EKEventViewController wont show Edit Button on iOS 13

我有一个简单的应用程序,我想在其中显示 EKEventViewController 中的事件。

    // the button action which validates if the event store access is granted and presents the given alert if true
    @IBAction func actionButtonShowPopover(_ sender: Any) {
        eventStore.requestAccess(to: .event) { (granted, _) in
            guard granted else { return }

            let event = self.generateAndSaveEvent()
            self.presentEventViewController(withEvent: event)
        }
    }
    // creates and tries to save an sample even and returns it
    private func generateAndSaveEvent() -> EKEvent {
        let event = EKEvent(eventStore: eventStore)

        event.title = "Event Title"
        event.startDate = Date()
        event.endDate = Date().addingTimeInterval(1800)
        event.calendar = eventStore.defaultCalendarForNewEvents

        do {
            try eventStore.save(event, span: .thisEvent)
        } catch(let error) {
            print(error)
        }

        return event
    }
    // displays an EKEventViewController with our newly created event within an popover
    private func presentEventViewController(withEvent event: EKEvent) {
        DispatchQueue.main.async {
            let eventVC = EKEventViewController()

            eventVC.event = event
            eventVC.allowsEditing = true

            eventVC.modalPresentationStyle = .popover
            eventVC.popoverPresentationController?.sourceView = self.buttonShowPopover
            eventVC.popoverPresentationController?.sourceRect = self.buttonShowPopover.frame.offsetBy(dx: 0, dy: -10)
            eventVC.popoverPresentationController?.backgroundColor = .white
            eventVC.popoverPresentationController?.permittedArrowDirections = .up

            self.present(eventVC, animated: false, completion: nil)
        }
    }

我创建了一个事件,如上面的代码所示,并简单地在弹出视图控制器中显示它。因为 ios 13 我得到了不同的结果:

iOS 12.4 with edit button

iOS 13 without edit button

我是否有可能遗漏 iOS12 -> iOS13 的更改? 预先感谢 - 我很感激任何建议!

iOS13 中的编辑按钮已移至导航栏。您需要以无弹出式的方式呈现它。

在我的应用程序中,它已经存在了一段时间,我遇到了同样的问题,编辑按钮不再出现在 iOS13 中。与其他用户不同,我的 EKEventViewController 已经包含在导航控制器中,所以不是那个问题。

经过几个小时的探索,我找到了解决方法。这是我的应用中出现问题的地方:

  • 在打开视图之前调试,我试图编辑的 EKEvent 对象没有为 .eventIdentifier 设置值。读到这里,似乎这个 属性 是延迟加载的,所以无法在此处检索值表明 EKEventEKStore 之间的 link 我曾经获取它已经丢失在应用程序生命周期的某个地方。这是 iOS/Swift 升级过程中某处引入的更改 - 我无法确定导致此问题的更改。

  • 通过在我第一次检索 EKEvent 时访问 EKEvent.eventIdentifier,我现在有了这个标识符供以后使用

  • 在展示 EKEventViewController 之前,我获取了该事件的新副本并在控制器中使用了新事件:

let freshEvent = store.event(withIdentifier: staleEvent.eventIdentifier) 
eventViewController.event = freshEvent