我收到一个错误:

删除事件错误:错误域= EKErrorDomain代码= 11“该事件不属于该事件存储。” UserInfo = 0x1fdf96b0 {NSLocalizedDescription =该事件不属于该事件存储。

当我尝试删除刚刚创建的EKEvent时。

下面的代码显示我正在存储eventIdentifier并使用它来检索事件。此外,当我执行此操作和NSLog事件时,我可以正确看到它的所有属性。

从所有示例中,我都可以看出我所做的一切正确。每次我以任何方法访问它时,我还对NSEvent设置了EKEventStore的eventStoreIdentifier及其相同的名称,因此它应该是相同的EKEventStore。

任何帮助将不胜感激。

- (EKEvent *) getCurrentCalendarEvent {
    NSString *currentCalendarEventID = [[UserModel sharedManager] currentCalendarEventID];
    EKEventStore *eventStore = [[EKEventStore alloc] init];
    EKEvent *event = [eventStore eventWithIdentifier:currentCalendarEventID];
    return event;
}

- (void) removeCurrentCalendarEvent {
    EKEvent *event = [self getCurrentCalendarEvent];
    if (event) {
        NSError *error;
        EKEventStore *eventStore = [[EKEventStore alloc] init];
        [eventStore removeEvent:event span:EKSpanFutureEvents error:&error];
    }
}

- (void) addCurrentCalendarEvent {
    [self removeCurrentCalendarEvent];

    EKEventStore *eventStore = [[EKEventStore alloc] init];
    EKEvent *event = [EKEvent eventWithEventStore:eventStore];
    event.title = [[UserModel sharedManager] reminderLabel];
    event.notes = @"Notes";

    NSDate *startDate = [NSDate date];
    int futureDateSecs = 60 * 5;
    NSDate *endDate = [startDate dateByAddingTimeInterval:futureDateSecs];

    event.startDate = startDate;
    event.endDate = endDate;

    [event setCalendar:[eventStore defaultCalendarForNewEvents]];

    NSError *error;
    [eventStore saveEvent:event span:EKSpanThisEvent error:&error];

    [[UserModel sharedManager] setCurrentCalendarEventID:event.eventIdentifier];
    [[UserModel sharedManager] saveToDefaults];
}

最佳答案

这是因为您是always initializing a new instance of EKEventStore。当您将EKEvent添加到EKEventStore时,那么EKEventStore的实例与尝试删除时的实例不同。您可以做的是在.h中声明EKEventStore参考变量,并将其初始化一次。

在.h中-

EKEventStore *eventStore;

在.m中-

里面viewDidLoad-
eventStore = [[EKEventStore alloc] init];

然后从所有三种方法中删除此行-
EKEventStore *eventStore = [[EKEventStore alloc] init];

10-08 05:44