0

以下代码适用于非重复事件,对 startDate 和 endDate 的更改保存得很好。

BOOL success = [theEventStore saveEvent:event
                                   span:EKSpanFutureEvents
                                 commit:YES error:&error];

但是,每当我尝试编辑具有 recurranceRules 的事件时,它返回成功 == YES,但没有保存任何内容,并且对 startDate/endDate 或 recurranceRules 的任何更改都将恢复为原始值。(使用 span:EKSpanThisEvent 有效,但这当然不是我想做的。此外,该代码适用于 iOS,但不适用于 OSX。)

4

2 回答 2

1

eventWithIdentifier 返回重复事件的第一次出现。当您使用 EKSpanFutureEvents 更改此事件的某些内容时,您将更改所有事件。eventsMatchingPredicate 返回与您的谓词匹配的每个事件。EKSpanFutureEvents 将从您使用的特定事件中更改每个事件。如果事件已分离,则无关紧要,如果您采用 EKSpanThisEvent 或 EKSpanFutureEvents。我不明白你的代码应该做什么。

于 2013-05-24T15:55:22.697 回答
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];
}

我还没有找到任何好的文档,也许它是一个“错误”或者只是 EventKit 的那些特殊行为之一。在任何情况下,您在修改重复事件时似乎都需要非常小心。

于 2013-05-10T10:10:49.913 回答