2015-07-20 4 views
0

Я создаю приложение, в котором я синхронизирую определенные события с календарем на iPhone.EventKit последнее событие календаря

Проблема заключается в том, у меня нет возможности сказать, которые были изменены события/удалены/... Так мне нужно, чтобы удалить все события между сегодняшним днем ​​и на дату окончания последнего события календаря до ' синхронизация "(чтение вставки) новых событий.

Насколько я видел, единственный способ сделать действие на несколько событий одновременно, является использование enumerateEventsMatchingPredicate:usingBlock: и predicateForEventsWithStartDate:endDate:calendars:

Но для этого мне нужно конкретную дату окончания. (и, таким образом, дата окончания последнего события в моем календаре)

Я всегда мог сохранить идентификатор события последнего события, которое я вставляю в этот календарь, но я бы предпочел не делать этого: Если пользователь удаляет мои приложение и устанавливает его позже, у меня больше нет идентификатора последнего события. (учитывая, что он не удалил календарь вручную, конечно)

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

Любые идеи или советы очень ценятся!

ответ

0

Для вашего комментария на:

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

На самом деле вы можете получить все события из календаря:

NSDate *start = ... 
NSDate *finish = ... 

// use Dictionary for remove duplicates produced by events covered more one year segment 
NSMutableDictionary *eventsDict = [NSMutableDictionary dictionaryWithCapacity:1024]; 

NSDate* currentStart = [NSDate dateWithTimeInterval:0 sinceDate:start]; 

int seconds_in_year = 60*60*24*365; 

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

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

    if ([currentFinish compare:finish] == NSOrderedDescending) { 
     currentFinish = [NSDate dateWithTimeInterval:0 sinceDate:finish]; 
    } 
    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]; 
              } 

             }];  
    currentStart = [NSDate dateWithTimeInterval:(seconds_in_year + 1) sinceDate:currentStart]; 

} 

NSArray *events = [eventsDict allValues]; 
+0

но то для фиксированной даты окончания, нет? – SnyersK

+0

вы можете изменить дату и позвонить ей, когда вам нужно –

+0

Да, но мне еще нужно указать дату окончания, что я точно не знаю. Мне действительно не нужно последнее событие, мне нужна дата окончания этого события. Если бы я использовал это, я, вероятно, был бы лучше просто поставить случайную дату в будущем в качестве даты окончания моего предиката. – SnyersK

Смежные вопросы