以下代码适用于非重复事件,对startDate和endDate的更改保存得很好。
BOOL success = [theEventStore saveEvent:event
span:EKSpanFutureEvents
commit:YES error:&error];
但每当我尝试编辑具有recurranceRules的事件时,它会返回成功== YES,但不保存任何内容,并且对startDate / endDate或recurranceRules的任何更改都将恢复为原始值。 (使用span:EKSpanThisEvent可以工作,但这当然不是我想要的。此外,代码适用于iOS,但不适用于OSX。)
答案 0 :(得分:1)
eventWithIdentifier返回第一次出现的重复事件。当您使用EKSpanFutureEvents更改此事件的内容时,您将更改所有实例。 eventsMatchingPredicate返回与谓词匹配的每个事件。 EKSpanFutureEvents将根据您使用的特定事件更改每个事件。 如果事件被分离,则无关紧要,如果您使用EKSpanThisEvent或EKSpanFutureEvents。 我不知道你的代码应该做什么。
答案 1 :(得分:0)
我想我找到了解决方案,或者至少是一种解决方法。似乎在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];
}
我没有找到任何关于此的好文档,可能是“bug”或只是EventKit的那些特殊行为之一。无论如何,在修改重复发生的事件时,您似乎需要非常小心。