从应用程序创建日历时的iCloud日历同步问题

尝试为iOS实现iCloud Calendar同步。 我的想法是从我的应用程序创建一个新日历,并在实际启用iCloud同步时将其与iCloud同步。 要获得相应的源,我使用以下代码:

EKSource * localSource = nil;

for(EKSource * source in self.eventStore.sources){if(source.sourceType == EKSourceTypeCalDAV && [source.title isEqualToString:@“iCloud”]){localSource = source; 打破; }

}

然后在该源中创建日历并保存。

当iCloud同步打开并且iCloud的日历同步也开启时,从iPhone->设置 – > iCloud->日历它正常工作。 从理论上讲,在从上述设置关闭日历同步后,它不应该再允许在该商店中创建日历。 但实际上甚至在这种情况下它允许从我的应用程序获得相应的iCloud存储并创建/保存新日历。 创建新日历后,它不会在iPhone的日历列表中显示。 但是当您登录iCloud Web界面时,您可以看到许多与您刚刚添加的名称相同的日历。 具有该名称的日历的数量越来越多。 像这样的接缝在iCloud的日历同步中存在无限循环问题。 到目前为止这样的接缝是一个iOS问题,无法在任何地方找到任何报告。

不确定你是否想过这个,如果你这样做,请发布你的解决方案:-)

但它似乎确实是一个错误 – 我只是在我的Mac上检查了iCal并且它装载了重复的日历。

只是想出来,但我认为我工作的一些粗略的代码是在EKSource中创建一个日历,然后检查该日历。

像这样的东西:

-(BOOL)testCal { BOOL cal = 0; NSUInteger counter = 1; for (EKCalendar *thisCalendar in [[DGEK eventStore]calendars] ){ NSLog(@"%@", thisCalendar.title); if ([thisCalendar.title isEqualToString:@"YourCalName"]) { cal = YES; return cal; } counter++; } return cal; } 

我认为这很有效。 现在只做一些测试。

如果Cal不存在,我会得到这样的默认源:

 source = [[[self eventStore] defaultCalendarForNewEvents] source]; 

希望有所帮助。