Как я могу отметить EKEvent как завершенное?

Как я могу позволить пользователю пометить EKEvent как завершенное? В настоящее время я выбираю события для даты и показываю ее в UITableView.

// Fetching events happening in the next 24 hours with a predicate, limiting to the default calendar
- (NSArray *)fetchEventsForDate:(NSDate*)startDate
{
    [self.eventsList removeAllObjects];
    // endDate is 1 day = 60*60*24 seconds = 86400 seconds from startDate
    NSDate *endDate = [startDate dateByAddingTimeInterval:86400];


    NSMutableDictionary *eventsDict = [NSMutableDictionary dictionaryWithCapacity:1024];
    NSDate* currentStart = [NSDate dateWithTimeInterval:0 sinceDate:startDate];

//    int seconds_in_year = 60*60*24*365;
    int seconds_in_day = 60*60*24;


    // enumerate events by one year segment because iOS do not support predicate longer than 4 year !
    //while ([currentStart compare:endDate] == NSOrderedAscending) {

        NSDate* currentFinish = [NSDate dateWithTimeInterval:seconds_in_day sinceDate:currentStart];

        if ([currentFinish compare:endDate] == NSOrderedDescending) {
            currentFinish = [NSDate dateWithTimeInterval:0 sinceDate:endDate];
        }
        NSPredicate *predicate = [eventStore predicateForEventsWithStartDate:currentStart endDate:currentFinish calendars:nil];
        [eventStore enumerateEventsMatchingPredicate:predicate
                                          usingBlock:^(EKEvent *event, BOOL *stop) {
                                              if (event) {
                                                  [eventsDict setObject:event forKey:event.eventIdentifier];
                                              }
                                          }];       

    NSArray *events = [eventsDict allValues];

    return events;
}

Я хочу, чтобы пользователь коснулся ячейки события, чтобы отметить ее как завершенную.

Что можно изменить (любой тег или bool), чтобы обновить и сохранить это EKEvent, чтобы в будущем показывать его как завершенное событие?

[self.eventStore saveEvent: myUpatedEvent span:EKSpanThisEvent error:&error];

Я исследовал

event.status, event.refresh, event.organizer, event.availability, etc.

но никто не был полезен.

Я старался EKEventAvailability как

  [event setAvailability:EKEventAvailabilityUnavailable];
        NSError *error = nil;
        NSLog(@"Event Availbility:%d",event.availability); // It always returned -1;
        [self.eventStore saveEvent:event span:EKSpanThisEvent error:&error];
        if (error) {
            NSLog(@"Save Event errorDiscription:%@",error.description);
        }

но он не обновлялся и не возвращал -1 (EKEventAvailabilityNotSupported) и обновление.

Пожалуйста, предложите!

Спасибо!

1 ответ

Вы можете изменить availability прослушанного события как EKEventAvailabilityUnavailable, Если событие завершено, по логике оно недоступно, не так ли?

But if the event’s calendar does not support availability settings,
this property’s value is `EKEventAvailabilityNotSupported.`

РЕДАКТИРОВАТЬ:
Мы можем поочередно, использовать eventIdentifier собственность EKEvent.

Это уникальный идентификатор события. (только для чтения) Мы можем хранить его локально или в CoreData, когда пользователь нажимает на событие и использовать для будущих целей.

Другие вопросы по тегам