EKEventStore:“initWithAccessToEntityTypes”不可用:在 iOS 上不可用

Posted

技术标签:

【中文标题】EKEventStore:“initWithAccessToEntityTypes”不可用:在 iOS 上不可用【英文标题】:EKEventStore: 'initWithAccessToEntityTypes' is unavailable: not available on iOS 【发布时间】:2020-06-04 03:17:24 【问题描述】:

我正在尝试设置一个EKEventStore 以(在他们的许可下)在 ios 应用中显示用户的日历活动。

我遇到的关于如何初始化 EKEventStore 实例 (1.Accessing the Event Store; 2.Reading and Writing Calendar Events) 的前几页 Apple 文档是这样说的:

EKEventStore *eventStore = [[EKEventStore alloc] initWithAccessToEntityTypes:EKEntityMaskEvent];

但是,在使用最新 Xcode(版本 11.3)和“单页应用程序”模板创建的新 iOS 应用程序中,将上述代码行添加到 ViewController.m 的 viewDidLoad 方法中,Xcode 给出了这个错误:

'initWithAccessToEntityTypes' is unavailable: not available on iOS

在 iOS 应用中初始化 EKEventStore 的正确方法是什么?

【问题讨论】:

【参考方案1】:

文章EKEventStore暗示在iOS上,你可以在iOS上使用默认的init方法:

在 macOS 中,使用 initWithAccessToEntityTypes: 代替默认的 init 方法。可接受的实体类型是事件的 EKEntityMaskEvent 和提醒的 EKEntityMaskReminder。

我尝试在我的应用的 ViewController.m 中这样做:

#import <EventKit/EventKit.h>

// ...

- (void)viewDidLoad 

    EKEventStore *eventStore = [[EKEventStore alloc] init];

    // ...

这在我的 iOS 应用中对我来说效果很好;我能够继续使用eventStore 成功检索日历事件(在用户在运行时授予权限之后)。

【讨论】:

以上是关于EKEventStore:“initWithAccessToEntityTypes”不可用:在 iOS 上不可用的主要内容,如果未能解决你的问题,请参考以下文章

应用程序关闭时如何在 EKEventStore 中检测?

EKEventStore 不会按外部或本地标识符返回 Exchange 日历项目

在 EKEventStore 中检索具有特定标题的 EKEvent

EKEventstore 和唯一的日历标识符

EKEventStore removeEvent EKErrorDomain 代码=11 EKErrorObjectBelongsToDifferentStore

无法在 macOS 的 Swift 应用程序中请求日历事件访问(通过 EKEventStore)