我想我找到了解決方案,或者至少解決方法。看起來在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的那些奇特的行爲之一。無論如何,在修改週期性事件時似乎需要格外小心。
根據我所做的測試,它可以像你在iOS上說的那樣工作。但在Mac上,使用eventsMatchingPredicate不起作用,它不保存更改。我使用的解決方法是使用eventWithIdentifier來獲取原始事件。但是這有點令人費解,所以所有關於發生的事情的線索都是受歡迎的。 – 2013-05-26 14:07:38
我在Mac上沒有任何經驗,對不起。 – 2013-05-27 08:30:00