我使用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的
答案 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。每隔几秒钟进行一次循环检查是否有更改。当更改发生时,它在交换服务器上,您最好在数据库中引用它。
尝试一下,让我知道它是否有效!