我想我找到了解决方案,或者至少找到了解决方法。似乎在 Mac OS X 上,当您修改经常性事件时,您应该使用 eventWithIdentifier 获取它们,而不是使用 eventsMatchingPredicate 中的那些。
NSArray* events = [_eventStore eventsMatchingPredicate:predicate];
EKEvent* event = [events objectAtIndex:index];
EKEvent* original = [_eventStore eventWithIdentifier:event.eventIdentifier];
if (event.isDetached)
{
… // modify detached event
success = [_eventStore saveEvent:event
span:EKSpanThisEvent
commit:YES
error:&error];
}
else if (!original.hasRecurrenceRules)
{
… // modify non-recurrent event
success = [_eventStore saveEvent:event
span:EKSpanFutureEvents
commit:YES
error:&error];
}
else
{
… // modify the original in a series of recurring events
success = [_eventStore saveEvent:original
span:EKSpanFutureEvents
commit:YES
error:&error];
}
我还没有找到任何好的文档,也许它是一个“错误”或者只是 EventKit 的那些特殊行为之一。在任何情况下,您在修改重复事件时似乎都需要非常小心。