EKCalendar остается в приложении календаря после удаления приложения

Я работаю над приложением, которое использует EKEventStore и EKCalendar.

EKEventStore является статическим:

static EKEventStore *eventStore = nil;

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

- (void)requestAccess:(void (^)(BOOL granted, NSError *error))callback;
{
    if (eventStore == nil) {
        eventStore = [[EKEventStore alloc] init];
    }
    // request permissions
    [eventStore requestAccessToEntityType:EKEntityTypeEvent completion:callback];

    //EKCalendar *calendar = nil;
     NSString *calendarIdentifier = [[NSUserDefaults standardUserDefaults] valueForKey:calendarIdentifer];
    if (calendarIdentifier) {
        self.calendar = [self retrieveCalendar];
    }

}

После этого я могу создать новый календарь и сохранить свое мероприятие. Однако, если я удалю приложение, календарь останется в приложении календаря. Когда я запускаю приложение, я создаю новый EKEventStore, а это значит, что я также создаю новый календарь.

Это означает, что если я удалю приложение и переустановлю его несколько раз, я получу огромный список одних и тех же календарей, и только самые новые будут доступны мне в приложении. Можно ли удалить календарь при удалении приложения. Или я могу что-то сделать, чтобы получить доступ к предыдущему календарю, который был создан.

Любая помощь очень ценится.


person pls    schedule 18.09.2015    source источник


Ответы (1)


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

EKEventStore *eventDB = [[EKEventStore alloc] init];

NSArray *calendarEvents = [eventDB calendarsForEntityType:EKEntityTypeEvent];
NSArray *calendarReminder = [eventDB calendarsForEntityType:EKEntityTypeReminder];

NSMutableArray *calendars = [NSMutableArray arrayWithArray:calendarEvents];
[calendars addObjectsFromArray:calendarReminder];

NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
NSString *typeString = @"";

for (EKCalendar *thisCalendar in calendars) 
    if([thisCalendar.title isEqualToString:@"YourcalendarName"])
        // your code

но пользователь может изменить имя календаря, и это рискованно, поэтому вы можете получить его, купив идентификатор, который вы можете сохранить при создании календаря, НО, если вы объединитесь с iCloud:

При полной синхронизации с календарем этот идентификатор будет потерян. У вас должен быть план работы с календарем, идентификатор которого больше нельзя извлечь, путем кэширования других его свойств.

person Constantin Saulenco    schedule 04.12.2015