访问EKCalendar

时间:2018-11-10 16:54:08

标签: swift calendar access

在我的应用中,我有一个开关,允许用户将某些事件添加到他们的议程中。我这样处理:

@IBAction func putInAgenda(_ sender: UISwitch) {
        let store = manager.store
        if (sender.isOn){
            store.requestAccess(to: EKEntityType.event, completion: {
                (accessGranted: Bool, error: Error?) in
                if accessGranted == true {
                    self.eventsHandler.importEventsInAgenda(id)
                } else {
                    DispatchQueue.main.async {
                        sender.isOn = false
                    }
                }
            })
        } else {
            //
        }

        shared?.set(sender.isOn, forKey: "putInAgenda")
        shared?.synchronize()
    }

但是,出乎我的意料,“ store.requestAccess”不仅请求,而且设置。

结果,当用户取消该对话框时,开关将切换回(预期),但是任何连续尝试将开关切换到ON位置的操作都将被视为OFF位置,而不会出现新对话框。

我该怎么办?

1 个答案:

答案 0 :(得分:0)

只要求一次隐私请求。如果检测到当前拒绝它,则可以更新UI或提示用户转到“设置”并将其打开。您可以使用UIApplication openSettingsURLStringUIApplication openURL将用户带到“设置”应用中应用的设置页面。