【问题标题】:EventKit, error while saving event: The repeat field cannot be changed.EventKit,保存事件时出错:无法更改重复字段。
【发布时间】:2018-12-20 12:26:45
【问题描述】:

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

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

我在下面包含了我的调试输出。第一部分,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.}

【问题讨论】:

    标签: ios eventkit ekevent


    【解决方案1】:

    啊哈!我终于想通了!如果使用跨度EKSpanThisEvent 保存重复事件,它将变为“分离”。这可以通过调用[event isDetached] 来检查。我们不允许保存分离事件的重复规则。

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

    【讨论】:

      【解决方案2】:

      我知道这个原始线程很旧,但我遇到了类似的问题并想添加我的观点。

      我的重建步骤是:

      1. 使用重复规则创建新事件
      2. 更新该事件以删除重复规则
      3. 这次再次更新该保存事件,重新添加重复规则

      第二次更新时,重复规则没有被接受,正如 Michael 所报告的那样。阅读这篇文章后,我也发现该事件已将 isDetached 设置为 true。

      根据 SOP,该事件最初是使用 EKSpan.futureEvents 保存的,因为它具有重复规则集。

      但是,同样根据 SOP,没有重复规则的保存使用 EKSpan.thisEvent。这就是导致事件分离的原因 (isDetached = true)。

      解决方案是使用 EKSpan.futureEvents 保存事件,即使更新没有任何重复规则。

      从那里开始,何时使用 .thisEvent 或 .futureEvents 的标准逻辑仍然成立。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-08-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多