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

时间:2018-04-11 21:05:01

标签: ios objective-c calendar exchange-server ekeventstore

我使用EKEventStore API使用以下内容将事件保存到默认日历:

EKEventStore - saveEvent:span:commit:error:。

保存事件后,我将externalID和localID存储在我的数据库中,以供将来参考:

externalID = [myEvent calendarItemExternalIdentifier];和 localID = [myEvent eventIdentifier]。

我遇到的问题是,当我回去尝试使用以下内容检索事件时:

[[eventStore calendarItemsWithExternalIdentifier:externalID] firstObject]

OR

[eventStore eventWithIdentifier:localID],

iOS无法找到我的活动。

如果我运行完全相同的代码,但将默认日历设置为iCloud日历,则一切正常。

但如果默认日历是Exchange日历,则会收到以下错误消息:

"使用UUID获取日历项时出错[在此处插入externalID]:错误域= EKCADErrorDomain代码= 1010"(null)""

有没有人遇到过这个问题?

我已经将此代码部署了超过2年,用户最近报告说他们无法打开在Exchange日历上创建的约会。不知道发生了什么变化或什么时候发生了变化,但我已经在iOS 10和11上测试了这个,但两者都有问题。

非常感谢任何见解, 此致 〜Arash的

2 个答案:

答案 0 :(得分:0)

不幸的是,我们无法通过在事件注释中包含内部参考ID来解决此问题。然后,如果externalEventID和eventID均未能返回事件(这是我们在Exchange上遇到的问题),那么我们将退一步以使用EKEventSearchCallback中的开始日期和结束日期来查找事件。

基本上,它最终看起来像这样:

EKEventSearchCallback searchBlock = ^(EKEvent *event, BOOL *stop)
{
    if([MyCustomClass event:event
 notesMatchesKnownValueDict:knownValueDict])
    {
        foundEvent = event;
        *stop = YES;
    }
};

NSPredicate *predicate = [eventStore predicateForEventsWithStartDate:startDate
                                                             endDate:endDate
                                                           calendars:nil];

[eventStore enumerateEventsMatchingPredicate:predicate usingBlock:searchBlock];

答案 1 :(得分:0)

另一个解决方案可能正在等待事件与Exchange同步。例如,我保存事件并跟踪分配给它的ID。每隔几秒钟进行一次循环检查是否有更改。当更改发生时,它在交换服务器上,您最好在数据库中引用它。

尝试一下,让我知道它是否有效!