删除并重新创建EKCalendar

时间:2016-01-27 13:18:32

标签: ios calendar

在我的应用中,我在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

现在,我观察到的是:

首次运行应用

  • 创建日历
  • 事件已导入。 (这是预期的,并且工作得很好)

当应用程序运行时,我再次使用按钮触发上述方法。以下是令我费解的结果:

  • 删除日历(预期结果)
  • 没有创建日历(为什么?这是我的主要问题)。方法的“if(!_calendar)”部分被视为FALSE,并且没有执行任何操作。
  • 'importEvents'方法贯穿其常规箍,没有任何明显的错误,尽管我会期待类似'无源'的错误。

请告知。

更新

这可能是发生了什么的指标,但我仍然没有得到它:

一段时间后,事件出现在不同的日历中,即不是名为“myCalendar”的日历,而是另一个基于iCloud的日历,显然是那个时候的 defaultCalendarForNewEvents 即可。但是,这对我来说也没有任何意义。

1 个答案:

答案 0 :(得分:0)

好的,那么,发生了什么: 我已经从商店中删除了日历,但实际上我的应用程序中仍然存在对该日历的引用。 我解决了它如下:

-(IBAction)deleteCalendar:(id)sender{
    NSError *error = nil;
    if(_calendar){
        [self.store removeCalendar:_calendar commit:YES error:&error];
    }
    _calendar = nil;
}

我希望这对某人有用