【发布时间】:2017-05-19 01:35:51
【问题描述】:
我在 iOS 9 中请求日历访问时遇到了一个奇怪的情况。该逻辑在所有 iOS 10 设备上都可以正常工作。
在我们的例子中,我们在工具栏上添加了一个按钮,用户点击该按钮可以将事件添加到他们的日历中。
因此,在用户第一次点击“添加到日历”按钮之前,我们不会检查访问日历的权限。像这样:
@IBAction func addToCalendarPressed(_ sender: UIBarButtonItem) {
eventStore.requestAccess(to: .event, completion: { (granted, error) in
if (granted) && (error == nil) {
// Present the EKEventEditViewController
} else {
// Do something else (show an alert)
}
})
}
在 iOS 10 中,该应用会按预期显示日历访问提示。 在 iOS 9.x 中,提示不显示,完成处理程序立即触发,并且授权返回 false。
更糟糕的是,即使“日历权限”检查似乎已完成,您也无法进入“设置”并手动启用日历访问权限。就设备而言,该应用从未进行过权限检查,因此该应用永远不会出现在“设置”>“隐私”>“日历”下。
我尝试将检查移到 viewWillAppear 或 viewDidLoad 中,而不是等待用户点击按钮,但它仍然不起作用。我已经提取了一些带有事件检查的示例应用程序,它们在 iOS 9 中工作。我只是无法弄清楚为什么提示在这种情况下会失败。
该应用程序还检查位置(但不在此屏幕上),并且这些在 iOS 9 中正常工作。
【问题讨论】:
标签: ios iphone swift permissions calendar