在我的应用中,我在EKCalendar中创建事件。我在线获取事件,为了刷新事件,我想首先删除日历(如果存在),重新创建它,然后将新事件放在那里。
要实例化我使用的日历
- (EKCalendar *)calendar {
if (!_calendar) {
NSArray *calendars = [self.store calendarsForEntityType:EKEntityTypeEvent];
NSString *calendarTitle = @"MyCalendar";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"title matches %@", calendarTitle];
NSArray *filtered = [calendars filteredArrayUsingPredicate:predicate];
if ([filtered count]) {
_calendar = [filtered firstObject];
} else {
_calendar = [EKCalendar calendarForEntityType:EKEntityTypeEvent eventStore:self.store];
_calendar.title = calendarTitle;
_calendar.source = self.store.defaultCalendarForNewEvents.source;
NSError *calendarErr = nil;
BOOL calendarSuccess = [self.store saveCalendar:_calendar commit:YES error:&calendarErr];
if (!calendarSuccess) {
NSLog(@"Calendar Error = %@", [calendarErr localizedDescription]);
}
}
}
return _calendar;
}
要删除日历,请使用
-(IBAction)deleteCalendar{
NSError *error = nil;
[self.store removeCalendar:_calendar commit:YES error:&error];
}
两种方法都可以单独使用。 因此,当我开始创建事件时,我会执行以下操作:
[self deleteCalendar];//delete calendar and its events, in case it already exists
[self calendar];//create calendar
[self importEvents];//put events in calendar
现在,我观察到的是:
首次运行应用
当应用程序运行时,我再次使用按钮触发上述方法。以下是令我费解的结果:
请告知。
更新
这可能是发生了什么的指标,但我仍然没有得到它:
一段时间后,事件出现在不同的日历中,即不是名为“myCalendar”的日历,而是另一个基于iCloud的日历,显然是那个时候的 defaultCalendarForNewEvents 即可。但是,这对我来说也没有任何意义。
答案 0 :(得分:0)
好的,那么,发生了什么: 我已经从商店中删除了日历,但实际上我的应用程序中仍然存在对该日历的引用。 我解决了它如下:
-(IBAction)deleteCalendar:(id)sender{
NSError *error = nil;
if(_calendar){
[self.store removeCalendar:_calendar commit:YES error:&error];
}
_calendar = nil;
}
我希望这对某人有用