EventKit,保存事件时出错:重复字段不能更改。

问题描述:

我正在构建日历应用程序,偶尔会在尝试保存某些事件时遇到奇怪的错误。我还没有能够可靠地产生一个复制问题的事件,但我很幸运(如果你可以这样称呼它)再次遇到错误。EventKit,保存事件时出错:重复字段不能更改。

问题是,当我保存某些事件时,他们拒绝保存其重复规则。大多数事件都保存得很好,从来没有问题。

我在下面列出了我的调试输出。第一部分EVENT描述了打开它进行编辑时的事件对象。第二部分“待处理事件”描述事件对象在即将被保存之前。最后一节EVENT SAVING ERROR描述了由EKEventStore saveEvent:span:commit:error:方法设置的错误。

任何帮助将不胜感激。

2013-12-23 11:47:23.641 planner[4360:60b] EVENT: EKEvent <0x1554d5d0> 
{ 
    EKEvent <0x1554d5d0> 
{ title =  Test repeat m; 
    location =  ; 
    calendar =  EKCalendar <0x1564cfc0> {title = Calendar; type = Local; allowsModify = YES; color = #CC73E1;}; 
    alarms =  (null); 
    URL =   (null); 
    lastModified = 2013-12-23 17:31:29 +0000; 
    timeZone =  America/Chicago (CST) offset -21600 
}; 
    location =  ; 
    startDate = 2013-12-23 07:00:00 +0000; 
    endDate =  2013-12-23 08:00:00 +0000; 
    allDay =  0; 
    floating =  0; 
    recurrence = (null); 
    attendees = (null) 
}; 

2013-12-23 11:47:32.480 planner[4360:60b] EVENT TO BE SAVED: EKEvent <0x1554d5d0> 
{ 
    EKEvent <0x1554d5d0> 
{ title =  Test repeat m; 
    location =  ; 
    calendar =  EKCalendar <0x1564cfc0> {title = Calendar; type = Local; allowsModify = YES; color = #CC73E1;}; 
    alarms =  (null); 
    URL =   (null); 
    lastModified = 2013-12-23 17:31:29 +0000; 
    timeZone =  America/Chicago (CST) offset -21600 
}; 
    location =  ; 
    startDate = 2013-12-23 07:00:00 +0000; 
    endDate =  2013-12-23 08:00:00 +0000; 
    allDay =  0; 
    floating =  0; 
    recurrence = EKRecurrenceRule <0x155a3d10> RRULE FREQ=DAILY;INTERVAL=1; 
    attendees = (null) 
}; 

2013-12-23 11:47:32.492 planner[4360:60b] EVENT SAVING ERROR: Error Domain=EKErrorDomain Code=28 "The repeat field cannot be changed." UserInfo=0x155826a0 {NSLocalizedDescription=The repeat field cannot be changed.} 

AHA!我终于明白了这一点!如果重复事件以范围EKSpanThisEvent保存,则它将变为“分离”。这可以通过致电[event isDetached]进行检查。我们不允许保存分离事件的重复规则。

我用于我的应用程序的解决方案是在用户正在编辑分离事件时隐藏用于设置重复规则的控件。这似乎是Apple在默认日历应用程序中使用的相同解决方案。