11

我正在实现从我的应用程序中的 iOS 日历添加和删除用户创建的事件的功能。我已经对用户创建事件时访问日历的权限请求进行了编码,并且效果很好。我将事件保存在服务器上,并允许他们稍后删除事件,当发生这种情况时,我也会从日历中删除事件。有人可能会在此应用程序之外创建一个事件,打开该应用程序,然后删除从服务器获取的约会。在这种情况下,日历中没有存储任何事件,但它仍然需要查看是否存在以尝试删除它,并且它失败了,因为在这种情况下我没有请求用户访问日历的权限。

但我不想在删除时征求用户的许可,因为用户不知道为什么应用程序会想要访问日历,因为他们不知道它可以将约会保存到日历中——他们在网站上创建了它,并且他们没有理由在那个时候授予它,因为它无论如何都不会做任何事情。

因此,我的问题是,是否可以在不发出请求的情况下确定您的应用当前是否可以访问日历,这将导致在未授予权限的情况下向用户显示自动警报 - 请参阅下面的请求代码?我只是想搜索事件以尝试仅在我已经可以访问日历的情况下尝试删除它,如果我没有,我不会尝试删除任何内容。

[eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
    if (granted) {
        //already have access or user tapped on Allow in popup
    }
    ...
4

2 回答 2

23

您可以使用[EKEventStore authorizationStatusForEntityType:EKEntityTypeEvent]

您需要检查此方法是否返回EKAuthorizationStatusAuthorized以得出您的应用当前有权访问给定实体类型的日历的结论。

更多可以在这里的类参考中找到

于 2014-07-01T21:37:21.300 回答
3
import EventKit;

let authorizationStatus = EKEventStore.authorizationStatus(for: .event);
                    switch authorizationStatus {
                    case .notDetermined:
                        print("notDetermined");
                    case .restricted:
                        print("restricted");
                    case .denied:
                        print("denied");
                    case .authorized:
                        print("authorized");
                    }
于 2017-07-15T09:58:50.380 回答